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

最近一直在做一个项目,需要支持视频,音频,图片的上传,前面介绍的都是把腾讯云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提示:

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

image-20230423100813193

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

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

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fang GL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值