文章目录
- 第一步:在.yml文件中配置对应秘钥内容
- 第二步:完成COSConfig类编写
- 第三步:编写Controller类
- Bug提示:
最近一直在做一个项目,需要支持视频,音频,图片的上传,前面介绍的都是把腾讯云COS的配置文件放在一个Controller中,但是随着项目变大,需求增多,这里做一个拆分和封装
第一步:在.yml文件中配置对应秘钥内容
#密钥
cos:
secretId: AKIDMeJ***********7PqDTef
secretKey: 679**************7BBC3
appId: 13******291
#存储桶
bucketName: lh-1*****3291
#区域设置
region: ap-beijing
#域名
url: https://*************ing.myqcloud.com
#默认文件夹
prefix: /files
第二步:完成COSConfig类编写
这里配置了客户端和配置文件类
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.region.Region;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
@Data
@Configuration
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Component
@ConfigurationProperties(prefix = "cos")
public class COSConfig {
private String secretId;
private String secretKey;
private String appId;
private String bucketName;
private String region;
private String url;
private String prefix;
@Bean
public COSClient cosClient() {
// 初始化用户信息
COSCredentials cosCredentials = new BasicCOSCredentials(this.secretId,this.secretKey);
// 设置地域
Region region = new Region(this.region);
ClientConfig config = new ClientConfig(region);
// 生成COS客户端
COSClient client = new COSClient(cosCredentials,config);
return client;
}
}
第三步:编写Controller类
这里要进行cosConfig和cosClient的依赖注入,因为后面要用到,整体来说,就是把配置类和客户端进行了封装,后面再进行调用的时候更加便捷一些。减少了代码量,前面我发过其他的教程都是放在一个类的这样确实有点不好,这里做一次修改
import com.lantu.common.vo.Result;
import com.lantu.sys.entity.COSConfig;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.*;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.util.UUID;
@Api(tags = {"数据上传接口"})
@RestController
public class FileUploadController {
@Resource
private COSConfig cosConfig;
@Resource
private COSClient cosClient;
//这里是图片和音频上传
@PostMapping("/upload")
public Result<String> handleFileUpload(@RequestParam("file") MultipartFile file){
String key = file.getOriginalFilename(); //获取当前文件名
UUID uuid=UUID.randomUUID();
String str=uuid.toString().replace("-", "");;
key="/image/"+str+key; //指定文件上传路径
String url="";
try {
InputStream inputStream = new BufferedInputStream(file.getInputStream());
//这一行代码是创建一个新的对象元数据(ObjectMetadata)实例,用于存储上传对象的元数据信息,例如对象的大小、内容类型、自定义元数据等。
// 在上传对象时,可以将这个对象元数据与上传请求一起发送到对象存储服务。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(file.getSize());
PutObjectRequest putObjectRequest = new PutObjectRequest(cosConfig.getBucketName(), key, inputStream, objectMetadata);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); //将文件进行上传
inputStream.close();
url= cosConfig.getUrl()+key;
System.out.println(url);
} catch (Exception e) {
System.out.println("文件上传警告!");
}
return Result.success(url);
}
}
Bug提示:
这里我在完成的手遇到一个问题,在这里记录一下:
在编写COSConfig类的时候如果出现这样的报错:
1.出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProperties这个注解时,所以问题出现在ConfigurationProperties注解。
完成下面几步就可以:
1.启动类添加
@EnableConfigurationProperties
2.pom.xml中添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
这两部完成基本就没什么问题了