以下是通过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 {
// ...
}
```
Java upload to Tencent COS
Guess you like
Origin blog.csdn.net/m0_56426418/article/details/131213341
Recommended
Ranking