腾讯云COS学习笔记

一、环境

java 1.8
spring boot 1.5.8
gradle3.2.1

二、COS使用示例

1. COS是腾讯云提供的对象存储服务,功能非常强大,可以作为文件服务器,CDN加速,静态网页服务,还提供了图片的常用操作。相关API文档:https://cloud.tencent.com/document/product/436/7751

2. 使用COS接口需要添加COS依赖,在build.gradle中添加依赖如下:

// 添加腾讯云COS依赖,里面的日志与 spring boot 的日志冲突,要去掉
compile group: 'com.qcloud', name: 'cos_api', version: '5.2.4'

注意:腾讯云COS依赖的日志与 spring boot 的日志冲突,需要在build.gradle中添加如下配置:

configurations {
	// 去除 COS 中的日志依赖
	compile.exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}

3. 在application.properties配置文件中配置OSS的accessId,accessKey,endpoint,bucket和host(当然,这里也可以直接在具体代码中定义,但建议配置到配置文件中比较方便维护)

#配置腾讯云COS文件服务器
cos.secretId=AKIDRkxxxxxxxxxxxxxxxxxxxxxxx
cos.secretKey=OemBxxxxxxxxxxxxxxxxxxxxxxxxx
cos.region=ap-guangzhou
cos.bucketName=liuzh-888888888
cos.host=https://liuzh-88888888.cosgz.myqcloud.com

4. 主要代码:

/**
 * 上传到腾讯云COS
 * @param avatarFile
 * @param userId
 * @return
 * @throws IOException
 */
@Override
public ResultBean uploadAvatar(MultipartFile avatarFile, Integer userId) throws IOException {

       if(!avatarFile.isEmpty()){
           String originalFilename = avatarFile.getOriginalFilename();
           String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
           if(avatarFile.getSize() > 2 *1024 * 1024){//文件不得大于2M
               logger.error("文件过大!");
               return new ResultBean(false, "文件过大!");
           }
           // 如果文件格式正确
           if(suffix.equalsIgnoreCase(".png") || suffix.equalsIgnoreCase(".jpg")){
               COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
               ClientConfig clientConfig = new ClientConfig(new Region(region));
               COSClient cosClient = new COSClient(cred, clientConfig);

               ObjectMetadata objectMetadata = new ObjectMetadata();

               // 指定要上传到 COS 上的路径
               String key = "ititme_avatar/" + GetIDUtil.createIdByUUID() + suffix;
               // 获取文件流
               InputStream inputStream = avatarFile.getInputStream();
               PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream, objectMetadata);
               PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);

               // 删除上一个头像文件
               deleteAvatar(userId);

               // 关闭cosClient
               cosClient.shutdown();

               // 返回文件名和、文件路径和上传结果
               String imgPath = host + "/" + key;
               return new ResultBean(true, "上传文件成功!");
           }else{
               logger.error("文件格式不正确!");
               return new ResultBean(false, "格式不正确!");
           }
       }
       return new ResultBean(true, "文件为空!");
   }

    private void deleteAvatar(Integer id) {

        // 删除上一个头像文件
        String oldAvatar = this.selectById(id).getAvatar();
        if(null != oldAvatar && !"".equals(oldAvatar)){
            int index = oldAvatar.lastIndexOf("rm-avatar");
            // 如果不是默认头像则删除
            if(index != -1  && !"/img/default_avatar.png".equals(oldAvatar)){
                String oldAvatarName = oldAvatar.substring(index);
                COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
                ClientConfig clientConfig = new ClientConfig(new Region(region));
                COSClient cosClient = new COSClient(cred, clientConfig);
                cosClient.deleteObject(bucketName, oldAvatarName);
                cosClient.shutdown();
            }
        }
    }

感谢您的阅读,个人网站:分享时刻【www.itison.cn】

你可能感兴趣的:(阿里云,建站)