spring boot 是2.2.1。
依赖
<!-- [腾讯云](https://l.gushuji.site/tencent) -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.6.8</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
全局配置文件
#[腾讯云](https://l.gushuji.site/tencent)地址
tencent:
path: https://images-12048382642.cos.ap-guangzhou.myqcloud.com
工具
package com.bk.cloudstorage.util;
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.auth.COSCredentialsProvider;
import com.qcloud.cos.exception.CosClientException;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.model.GetObjectRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.model.PutObjectResult;
import com.qcloud.cos.region.Region;
import java.io.File;
import java.util.Random;
public class TencentUtil {
// 此处填写的存储桶名称
private static final String bucketName = "";
//secretId
private static final String SecretId = "";
//SecretKey
private static final String SecretKey = "";
// 1 初始化用户身份信息(secretId, secretKey,可在[腾讯云](https://l.gushuji.site/tencent)后台中的API密钥管理中查看!
private static COSCredentials cred = new BasicCOSCredentials(SecretId,SecretKey);
2 设置bucket的区域, COS地域的简称请参照
// // https://cloud.tencent.com/document/product/436/6224,根据自己创建的存储桶选择地区
private static ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));
/**
* 简单文件上传, 最大支持 5 GB, 适用于小文件上传, 建议 20 M 以下的文件使用该接口 大文件上传请参照 API 文档高级 API 上传
*
* @param localfile 要上传的文件
*/
public static String uploadfile(File localfile,String pathPrefix){
COSClient cosClient = new COSClient(cred,clientConfig);
String fileName = "";
try {
fileName =localfile.getName();
String subString = fileName.substring(fileName.lastIndexOf("."));
Random random = new Random();
// 指定要上传到 COS 上的路径
fileName = pathPrefix+"/"+random.nextInt(10000)+System.currentTimeMillis()+subString;
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName,fileName,localfile);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
}catch (Exception e){
e.printStackTrace();
}finally {
// 关闭客户端(关闭后台线程)
cosClient.shutdown();
}
return fileName;
}
public static void downFile(){
// 生成cos客户端
COSClient cosClient = new COSClient(cred,clientConfig);
//要下载的文件路径和名称
String key = "down";
// 指定文件的存储路径
File downFile = new File("");
// 指定要下载的文件所在的 bucket 和对象键
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName,key);
ObjectMetadata down = cosClient.getObject(getObjectRequest,downFile);
}
/**
* 删除文件
*/
public static void deletefile(String key) throws CosClientException, CosServiceException {
// 生成cos客户端
COSClient cosclient = new COSClient(cred, clientConfig);
// 指定要删除的 bucket 和路径
cosclient.deleteObject(bucketName, key);
// 关闭客户端(关闭后台线程)
cosclient.shutdown();
}
}
控制层
package com.bk.cloudstorage.controller;
import com.bk.cloudstorage.util.TencentCOS;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class imageUploadController {
@Value("${tencent.path}")
private String IMAGE_PATH;
@RequestMapping("/upload")
public String upload(@RequestParam("file")MultipartFile mulipartFilet,
@RequestParam("username") String username, Model model) throws IOException {
String fh="";
String fileName = mulipartFilet.getOriginalFilename();
//判断有无后缀
if (fileName.lastIndexOf(".")<0) {
return "上传图片格式不正确!";
}
//获取文件后缀
String prefix = fileName.substring(fileName.lastIndexOf("."));
if(!prefix.equalsIgnoreCase(".jpg")&&!prefix.equalsIgnoreCase(".jpeg")
&& !prefix.equalsIgnoreCase(".svg")){
return "上传格式不正确!";
}
//使用uuid作为文件名,防止生成的临时文件重复
final File excelFile =File.createTempFile("imagesFile-" + System.currentTimeMillis(), prefix);
//将Multifile转换成File
mulipartFilet.transferTo(excelFile);
//调用[腾讯云](https://l.gushuji.site/tencent)工具上传文件
String imageName = TencentCOS.uploadfile(excelFile, "avatar");
//存入图片名称,用于网页显示
// model.addAttribute("imageName", imageName);
return "上传成功!";
}
/**
* 删除临时文件
*
* @param files 临时文件,可变参数
*/
private void deleteFile(File... files) {
for (File file : files) {
if (file.exists()) {
file.delete();
}
}
}
}