> 文章列表 > 腾讯云COS+SpringBOot实现文件上传下载功能

腾讯云COS+SpringBOot实现文件上传下载功能

腾讯云COS+SpringBOot实现文件上传下载功能

文章目录

      • 第一步:在.yml文件中配置对应秘钥内容
      • 第二步:完成COSConfig类编写
      • 第三步:编写Controller类
      • Bug提示:

最近一直在做一个项目,需要支持视频,音频,图片的上传,前面介绍的都是把腾讯云COS的配置文件放在一个Controller中,但是随着项目变大,需求增多,这里做一个拆分和封装

第一步:在.yml文件中配置对应秘钥内容

#密钥
cos:secretId: AKIDMeJ***********7PqDTefsecretKey: 679**************7BBC3appId: 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;@Beanpublic 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 {@Resourceprivate COSConfig cosConfig;@Resourceprivate 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提示:

这里我在完成的手遇到一个问题,在这里记录一下:

腾讯云COS+SpringBOot实现文件上传下载功能

在编写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>

这两部完成基本就没什么问题了