参考腾讯官方文档
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
代码
- TencentCosProperties
@Data
@Component
@ConfigurationProperties(prefix = "tencent.cos")
public class TencentCosProperties {
private String accessKey;
private String secretKey;
private String region;
private String bucket;
}
- 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;
COSClient cosClient = createCosClient();
File localFile = null;
String bucket = tencentCosProperties.getBucket();
try {
localFile = File.createTempFile("temp", null);
file.transferTo(localFile);
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() {
BasicCOSCredentials credentials = new BasicCOSCredentials(tencentCosProperties.getAccessKey(), tencentCosProperties.getSecretKey());
Region region = new Region(tencentCosProperties.getRegion());
ClientConfig clientConfig = new ClientConfig(region);
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;
File downloadFile = new File(System.getProperty("user.dir") + "/imgs/"+fileName);
GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, key);
try {
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) {
transferManager.shutdownNow(true);
}
private TransferManager createTransferManager() {
COSClient cosClient = createCosClient();
ExecutorService threadPool = Executors.newFixedThreadPool(32);
return new TransferManager(cosClient, threadPool);
}
}