springboot整合腾讯云cos进行上传、下载、删除文件

参考腾讯官方文档

pom

<dependency>
    <groupId>com.qcloud</groupId>
    <artifactId>cos_api</artifactId>
    <version>5.6.89</version>
</dependency>

application.yml

tencent:
  cos:
    accessKey: 你的秘钥id
    secretKey: 你的秘钥
    region: 你存储桶所在的区域
    bucket: 你的存储桶名称


spring:
  servlet:
    multipart:
      enabled: true
      file-size-threshold: 5MB
      max-file-size: 20MB

代码

  1. TencentCosProperties
@Data //lombok
@Component
@ConfigurationProperties(prefix = "tencent.cos")
public class TencentCosProperties {

    private String accessKey;
    private String secretKey;
    private String region;
    private String bucket;
}
  1. CosController
@RestController
public class CosController {

    @Autowired
    private TencentCosProperties tencentCosProperties;

    @PostMapping("/upload")
    public String upload(@RequestParam("file") MultipartFile file) {
        if (ObjectUtils.isEmpty(file)) {
            return "文件不能为空";
        }

        String filename = file.getOriginalFilename();
        String extension = filename.substring(filename.lastIndexOf("."));
        String newFileName = UUID.randomUUID().toString().replaceAll("-", "") + extension;

        //1.初始化客户端
        COSClient cosClient = createCosClient();

        //2.上传文件
        File localFile = null;
        String bucket = tencentCosProperties.getBucket();
        try {
            localFile = File.createTempFile("temp", null);
            file.transferTo(localFile);
            //指定文件上传到 COS 上的路径
            String key = "img/" + newFileName;
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, key, localFile);
            PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
            return "上传文件成功";
        } catch (IOException e) {
            return "上传文件失败";
        } finally {
            cosClient.shutdown();
        }
    }

    private COSClient createCosClient() {
        //1.1 初始化用户身份信息
        BasicCOSCredentials credentials = new BasicCOSCredentials(tencentCosProperties.getAccessKey(), tencentCosProperties.getSecretKey());
        //1.2 设置bucket的地域
        Region region = new Region(tencentCosProperties.getRegion());
        ClientConfig clientConfig = new ClientConfig(region);
        //1.3 生成cos客户端
        COSClient cosClient = new COSClient(credentials, clientConfig);
        return cosClient;
    }


    @PostMapping("/download")
    public String download(@RequestParam("fileName") String fileName) {
        TransferManager transferManager = createTransferManager();

        String bucket = tencentCosProperties.getBucket();
        String key = "img/" + fileName;
        //下载到工程目录下的imgs文件夹中
        File downloadFile = new File(System.getProperty("user.dir") + "/imgs/"+fileName);

        GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, key);
        try {
            //返回一个异步结果 Donload, 可同步的调用 waitForCompletion 等待下载结束, 成功返回 void, 失败抛出异常
            Download download = transferManager.download(getObjectRequest, downloadFile);
            download.waitForCompletion();
            return "下载文件成功";
        } catch (InterruptedException e) {
            return "下载文件失败";
        } finally {
            shutdownTransferManager(transferManager);
        }
    }

    @DeleteMapping("/delete")
    public String delete(@RequestParam("fileName") String fileName){
        COSClient cosClient = createCosClient();
        String bucket = tencentCosProperties.getBucket();
        String key = "img/" + fileName;
        try {
            cosClient.deleteObject(bucket,key);
            return "删除文件成功";
        } catch (CosClientException e) {
            return "删除文件失败";
        } finally {
            cosClient.shutdown();
        }

    }


    private void shutdownTransferManager(TransferManager transferManager) {
        // 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。
        // 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。
        transferManager.shutdownNow(true);
    }

    private TransferManager createTransferManager() {
        //初始化客户端
        COSClient cosClient = createCosClient();
        //创建线程池
        ExecutorService threadPool = Executors.newFixedThreadPool(32);
        //创建 TransferManager
        return new TransferManager(cosClient, threadPool);
    }

}
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用腾讯云官方提供的Java SDK,具体步骤如下: 1. 在pom.xml文件中引入腾讯云cos-java-sdk-v5依赖: ```xml <dependency> <groupId>com.qcloud</groupId> <artifactId>cos_api</artifactId> <version>5.6.19</version> </dependency> ``` 2. 创建腾讯云cos的配置类: ```java @Configuration public class TencentCosConfig { @Value("${tencent.cos.secretId}") private String secretId; @Value("${tencent.cos.secretKey}") private String secretKey; @Value("${tencent.cos.region}") private String region; @Value("${tencent.cos.bucketName}") private String bucketName; @Bean public COSCredentials cosCredentials() { return new BasicCOSCredentials(secretId, secretKey); } @Bean public ClientConfig clientConfig() { ClientConfig clientConfig = new ClientConfig(); clientConfig.setRegion(new Region(region)); return clientConfig; } @Bean public COSClient cosClient() { return new COSClient(cosCredentials(), clientConfig()); } @Bean public String bucketName() { return bucketName; } } ``` 其中,secretId和secretKey是腾讯云提供的访问密钥,region是存储桶所在的地域,bucketName是存储桶的名称。可以在配置文件中配置这些变量,这里用@Value注解获取。 3. 在上传文件的Controller中注入cosClient和bucketName,实现文件上传方法: ```java @RestController public class FileController { @Autowired private COSClient cosClient; @Autowired private String bucketName; @PostMapping("/uploadFile") public String uploadFile(@RequestParam("file") MultipartFile file) throws Exception { ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(file.getSize()); objectMetadata.setContentType(file.getContentType()); String fileName = UUID.randomUUID().toString() + "." + FilenameUtils.getExtension(file.getOriginalFilename()); PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, file.getInputStream(), objectMetadata); cosClient.putObject(putObjectRequest); return "https://" + bucketName + ".cos." + "region" + ".myqcloud.com/" + fileName; } } ``` 这里上传文件的方式为MultipartFile类型,使用Apache Commons IO工具类获取文件后缀名,并用UUID生成随机文件名。然后创建PutObjectRequest对象,调用cosClient的putObject方法上传文件,最后将文件URL返回给前端。 希望以上信息能对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值