Java upload to Tencent COS

以下是通过Spring Boot上传图片到腾讯COS并生成上传凭证的代码:

```java
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.COSObject;
import com.qcloud.cos.model.COSObjectInputStream;
import com.qcloud.cos.model.COSObjectSummary;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.Upload;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;

@Service
public class CosService {

    @Value("${cos.secretId}")
    private String secretId;

    @Value("${cos.secretKey}")
    private String secretKey;

    @Value("${cos.bucketName}")
    private String bucketName;

    @Value("${cos.region}")
    private String region;

    /**
     * 上传文件到COS
     *
     * @param file 文件
     * @return 文件在COS中的URL
     */
    public String uploadFile(MultipartFile file) throws IOException {
        // 生成文件名
        String fileName = UUID.randomUUID().toString() + "." + file.getOriginalFilename().split("\\.")[1];
        // 创建临时文件
        File tempFile = File.createTempFile("temp", null);
        // 将MultipartFile转换为File
        file.transferTo(tempFile);
        // 初始化COS客户端
        COSClient cosClient = new COSClient(secretId, secretKey);
        // 设置COS区域
        cosClient.setRegion(new Region(region));
        // 创建上传请求
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, tempFile);
        // 上传文件
        PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
        // 关闭COS客户端
        cosClient.shutdown();
        // 返回文件在COS中的URL
        return "https://" + bucketName + ".cos." + region + ".myqcloud.com/" + fileName;
    }

    /**
     * 获取COS中的所有文件
     *
     * @return 文件列表
     */
    public List<COSObjectSummary> listFiles() {
        // 初始化COS客户端
        COSClient cosClient = new COSClient(secretId, secretKey);
        // 设置COS区域
        cosClient.setRegion(new Region(region));
        // 获取COS中的所有文件
        List<COSObjectSummary> cosObjectSummaries = cosClient.listObjects(bucketName).getObjectSummaries();
        // 关闭COS客户端
        cosClient.shutdown();
        // 返回文件列表
        return cosObjectSummaries;
    }

    /**
     * 下载COS中的文件
     *
     * @param key 文件名
     * @return 文件流
     */
    public COSObjectInputStream downloadFile(String key) {
        // 初始化COS客户端
        COSClient cosClient = new COSClient(secretId, secretKey);
        // 设置COS区域
        cosClient.setRegion(new Region(region));
        // 创建下载请求
        GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
        // 下载文件
        COSObject cosObject = cosClient.getObject(getObjectRequest);
        // 获取文件流
        COSObjectInputStream cosObjectInputStream = cosObject.getObjectContent();
        // 关闭COS客户端
        cosClient.shutdown();
        // 返回文件流
        return cosObjectInputStream;
    }

    /**
     * 通过分块上传文件到COS
     *
     * @param file 文件
     * @return 文件在COS中的URL
     */
    public String uploadFileByPart(MultipartFile file) throws IOException {
        // 生成文件名
        String fileName = UUID.randomUUID().toString() + "." + file.getOriginalFilename().split("\\.")[1];
        // 创建临时文件
        File tempFile = File.createTempFile("temp", null);
        // 将MultipartFile转换为File
        file.transferTo(tempFile);
        // 初始化COS客户端
        COSClient cosClient = new COSClient(secretId, secretKey);
        // 设置COS区域
        cosClient.setRegion(new Region(region));
        // 初始化TransferManager
        TransferManager transferManager = new TransferManager(cosClient);
        // 创建上传请求
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, tempFile);
        // 通过分块上传文件
        Upload upload = transferManager.upload(putObjectRequest);
        // 等待上传完成
        upload.waitForCompletion();
        // 关闭TransferManager
        transferManager.shutdownNow();
        // 关闭COS客户端
        cosClient.shutdown();
        // 返回文件在COS中的URL
        return "https://" + bucketName + ".cos." + region + ".myqcloud.com/" + fileName;
    }
}
```

代码解释:

1. 引入COS SDK的相关类。

```java
import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.COSObject;
import com.qcloud.cos.model.COSObjectInputStream;
import com.qcloud.cos.model.COSObjectSummary;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.Upload;
```

2. 使用Spring Boot的`@Value`注解注入配置文件中的参数。

```java
@Value("${cos.secretId}")
private String secretId;

@Value("${cos.secretKey}")
private String secretKey;

@Value("${cos.bucketName}")
private String bucketName;

@Value("${cos.region}")
private String region;
```

3. 实现上传文件到COS的方法。

```java
public String uploadFile(MultipartFile file) throws IOException {
    // 生成文件名
    String fileName = UUID.randomUUID().toString() + "." + file.getOriginalFilename().split("\\.")[1];
    // 创建临时文件
    File tempFile = File.createTempFile("temp", null);
    // 将MultipartFile转换为File
    file.transferTo(tempFile);
    // 初始化COS客户端
    COSClient cosClient = new COSClient(secretId, secretKey);
    // 设置COS区域
    cosClient.setRegion(new Region(region));
    // 创建上传请求
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, tempFile);
    // 上传文件
    PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
    // 关闭COS客户端
    cosClient.shutdown();
    // 返回文件在COS中的URL
    return "https://" + bucketName + ".cos." + region + ".myqcloud.com/" + fileName;
}
```

4. 实现获取COS中的所有文件的方法。

```java
public List<COSObjectSummary> listFiles() {
    // 初始化COS客户端
    COSClient cosClient = new COSClient(secretId, secretKey);
    // 设置COS区域
    cosClient.setRegion(new Region(region));
    // 获取COS中的所有文件
    List<COSObjectSummary> cosObjectSummaries = cosClient.listObjects(bucketName).getObjectSummaries();
    // 关闭COS客户端
    cosClient.shutdown();
    // 返回文件列表
    return cosObjectSummaries;
}
```

5. 实现下载COS中的文件的方法。

```java
public COSObjectInputStream downloadFile(String key) {
    // 初始化COS客户端
    COSClient cosClient = new COSClient(secretId, secretKey);
    // 设置COS区域
    cosClient.setRegion(new Region(region));
    // 创建下载请求
    GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
    // 下载文件
    COSObject cosObject = cosClient.getObject(getObjectRequest);
    // 获取文件流
    COSObjectInputStream cosObjectInputStream = cosObject.getObjectContent();
    // 关闭COS客户端
    cosClient.shutdown();
    // 返回文件流
    return cosObjectInputStream;
}
```

6. 实现通过分块上传文件到COS的方法。

```java
public String uploadFileByPart(MultipartFile file) throws IOException {
    // 生成文件名
    String fileName = UUID.randomUUID().toString() + "." + file.getOriginalFilename().split("\\.")[1];
    // 创建临时文件
    File tempFile = File.createTempFile("temp", null);
    // 将MultipartFile转换为File
    file.transferTo(tempFile);
    // 初始化COS客户端
    COSClient cosClient = new COSClient(secretId, secretKey);
    // 设置COS区域
    cosClient.setRegion(new Region(region));
    // 初始化TransferManager
    TransferManager transferManager = new TransferManager(cosClient);
    // 创建上传请求
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, tempFile);
    // 通过分块上传文件
    Upload upload = transferManager.upload(putObjectRequest);
    // 等待上传完成
    upload.waitForCompletion();
    // 关闭TransferManager
    transferManager.shutdownNow();
    // 关闭COS客户端
    cosClient.shutdown();
    // 返回文件在COS中的URL
    return "https://" + bucketName + ".cos." + region + ".myqcloud.com/" + fileName;
}
```

7. 在Spring Boot的Service中使用以上方法。

```java
@Service
public class CosService {
    // ...
}
```

Guess you like

Origin blog.csdn.net/m0_56426418/article/details/131213341