阿里云存储多图

一.配置阿里云注册信息常量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

           }

      }

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