阿里雲存儲多圖

一.配置阿里雲註冊信息常量OSSClientConstants

public class OSSClientConstants {

      //阿里雲API的外網域名

    public static final String ENDPOINT = "oss-cn-hangzhou.aliyuncs.com";

    //阿里雲API的密鑰Access Key ID

    public static final String ACCESS_KEY_ID = "";

    //阿里雲API的密鑰Access Key Secret

    public static final String ACCESS_KEY_SECRET = "";

    //阿里雲APIbucket名稱

    public static final String BACKET_NAME = "cht-bucket";

    //阿里雲API的文件夾名稱

    public static final String FOLDER="cht-platform/upload/";

}

其中ENDPOINT 的配置常量不要添加bucket的名稱,直接加後面的參數!

 

二.配置AliyunOSSClientUtil類使用阿里雲OSS存儲對象上傳圖片

1.獲取之前配置的阿里雲OSS註冊常量信息

//log日誌

      private static Logger logger = Logger.getLogger(AliyunOSSClientUtil.class);

      //阿里雲API的內或外網域名

      private static String ENDPOINT;

      //阿里雲API的密鑰Access Key ID

      private static String ACCESS_KEY_ID;

      //阿里雲API的密鑰Access Key Secret

      private static String ACCESS_KEY_SECRET;

      //阿里雲API的bucket名稱

private static String BACKET_NAME;

//阿里雲API的文件夾名稱

private static String FOLDER;

//初始化屬性

static{

      ENDPOINT = OSSClientConstants.ENDPOINT;

      ACCESS_KEY_ID = OSSClientConstants.ACCESS_KEY_ID;

      ACCESS_KEY_SECRET = OSSClientConstants.ACCESS_KEY_SECRET;

      BACKET_NAME = OSSClientConstants.BACKET_NAME;

      FOLDER = OSSClientConstants.FOLDER;

      }

2.導入jar包

aliyun-sdk-oss-3.1.0.jar

3.通過常量域名ENDPOINT ,祕鑰ACCESS_KEY_IDACCESS_KEY_SECRET鏈接阿里雲生成OSS存儲對象OSSClient

public static  OSSClient getOSSClient(){

           return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);

}

4.判斷存儲空間是否存在,無則創建

public  static String createBucketName(OSSClient ossClient,String bucketName){

           //存儲空間

           final String bucketNames=bucketName;

           if(!ossClient.doesBucketExist(bucketName)){

                 //創建存儲空間

                 Bucket bucket=ossClient.createBucket(bucketName);

                 logger.info("創建存儲空間成功");

                 return bucket.getName();

           }

           return bucketNames;

      }

5.刪除存儲空間操作

public static  void deleteBucket(OSSClient ossClient, String bucketName){ 

        ossClient.deleteBucket(bucketName);  

        logger.info("刪除" + bucketName + "Bucket成功"); 

}

6.判斷文件夾是否存在,無則創建

public  static String createFolder(OSSClient ossClient,String bucketName,String folder){

           //文件夾名

           final String keySuffixWithSlash =folder;

           //判斷文件夾是否存在,不存在則創建

           if(!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)){

                 //創建文件夾

                 ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));

                 logger.info("創建文件夾成功");

                 //得到文件夾名

                 OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);

                 String fileDir=object.getKey();

                 return fileDir;

           }

           return keySuffixWithSlash;

      }

7. 根據key刪除OSS服務器上的文件

public static void deleteFile(OSSClient ossClient, String bucketName, String folder, String key){   

               ossClient.deleteObject(bucketName, folder + key);  

              logger.info("刪除" + bucketName + "下的文件" + folder + key + "成功"); 

         }

8. 上傳圖片至OSS

public static  String uploadObject2OSS(OSSClient ossClient, File file, String bucketName, String folder) {

           String resultStr = null;

           try {

                 //以輸入流的形式上傳文件

                 InputStream is = new FileInputStream(file);

                 //文件名

                 String fileName = file.getName();

                 //文件大小

            Long fileSize = file.length();

            //創建上傳ObjectMetadata 

                 ObjectMetadata metadata = new ObjectMetadata();

                 //上傳的文件的長度

            metadata.setContentLength(is.available()); 

            //指定該Object被下載時的網頁的緩存行爲

            metadata.setCacheControl("no-cache");

            //指定該Object下設置Header

            metadata.setHeader("Pragma", "no-cache"); 

            //指定該Object被下載時的內容編碼格式

            metadata.setContentEncoding("utf-8"); 

            //文件的MIME,定義文件的類型及網頁編碼,決定瀏覽器將以什麼形式、什麼編碼讀取文件。如果用戶沒有指定則根據Key或文件名的擴展名生成,

            //如果沒有擴展名則填默認值application/octet-stream

            metadata.setContentType(getContentType(fileName)); 

            //指定該Object被下載時的名稱(指示MINME用戶代理如何顯示附加的文件,打開或下載,及文件名稱)

            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte."); 

            //上傳文件   (上傳文件流的形式)

            PutObjectResult putResult = ossClient.putObject(bucketName, folder + fileName, is, metadata); 

                 //解析結果

                 resultStr = putResult.getETag();

           } catch (Exception e) {

                 e.printStackTrace();

                  logger.error("上傳阿里雲OSS服務器異常." + e.getMessage(), e); 

           }

           return resultStr;

      }

9. 通過文件名判斷並獲取OSS服務文件上傳時文件的contentType

public static  String getContentType(String fileName){

           //文件的後綴名

           String fileExtension = fileName.substring(fileName.lastIndexOf("."));

           if(".bmp".equalsIgnoreCase(fileExtension)) {

                 return "image/bmp";

           }

           if(".gif".equalsIgnoreCase(fileExtension)) {

                 return "image/gif";

           }

           if(".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension)  || ".png".equalsIgnoreCase(fileExtension) ) {

                 return "image/jpeg";

           }

           if(".html".equalsIgnoreCase(fileExtension)) {

                 return "text/html";

           }

           if(".txt".equalsIgnoreCase(fileExtension)) {

                 return "text/plain";

           }

           if(".vsd".equalsIgnoreCase(fileExtension)) {

                 return "application/vnd.visio";

           }

           if(".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {

                 return "application/vnd.ms-powerpoint";

           }

           if(".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {

                 return "application/msword";

           }

           if(".xml".equalsIgnoreCase(fileExtension)) {

                 return "text/xml";

           }

           //默認返回類型

           return "image/jpeg";

      }

 

測試

public static void main(String[] args) {

           //初始化OSSClient

           OSSClient ossClient=AliyunOSSClientUtil.getOSSClient();

           //上傳文件

           String files="D:\\image\\1010.jpg,D:\\image\\1111.jpg,D:\\image\\1212.jpg,D:\\image\\1313.jpg,D:\\image\\2222.jpg,D:\\image\\3333.jpg,"

                      + "D:\\image\\4444.jpg,D:\\image\\5555.jpg,D:\\image\\6666.jpg,D:\\image\\7777.jpg,D:\\image\\8888.jpg";

           String[] file=files.split(",");

           for(String filename:file){

                 //System.out.println("filename:"+filename);

                 File filess=new File(filename);

                 String md5key = AliyunOSSClientUtil.uploadObject2OSS(ossClient, filess, BACKET_NAME, FOLDER); 

                 logger.info("上傳後的文件MD5數字唯一簽名:" + md5key); 

                 //上傳後的文件MD5數字唯一簽名:40F4131427068E08451D37F02021473A

           }

      }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章