创建储存桶
(后面会用到 储存库名称、访问域名、以及region)
region(地域和访问域名)的查询参考:
2.创建Api密钥
(后面会用到 secretId、secretKey)
application.yml
qcloud: path: 域名地址 bucketName: 储存库名称 secretId: 密钥生成的secretId secretKey: 密钥生成的secretKey region: 地域简称 prefix: /images/
编写工具类
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.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; import com.qcloud.cos.model.PutObjectRequest; import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.region.Region; import lombok.Data; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.UUID; /** * @author * @date 2021/6/6 19:31 * @role */ @Data public class QCloudCosUtils { //API密钥secretId private String secretId; //API密钥secretKey private String secretKey; //存储桶所属地域 private String region; //存储桶空间名称 private String bucketName; //存储桶访问域名 private String path; //上传文件前缀路径(eg:/images/) private String prefix; /** * 上传File类型的文件 * * @param file * @return 上传文件在存储桶的链接 */ public String upload(File file) { //生成唯一文件名 String newFileName = generateUniqueName(file.getName()); //文件在存储桶中的key String key = prefix + newFileName; //声明客户端 COSClient cosClient = null; try { //初始化用户身份信息(secretId,secretKey) COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey); //设置bucket的区域 ClientConfig clientConfig = new ClientConfig(new Region(region)); //生成cos客户端 cosClient = new COSClient(cosCredentials, clientConfig); //创建存储对象的请求 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file); //执行上传并返回结果信息 PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); return path + key; } catch (CosClientException e) { e.printStackTrace(); } finally { cosClient.shutdown(); } return null; } /** * upload()重载方法 * * @param multipartFile * @return 上传文件在存储桶的链接 */ public String upload(MultipartFile multipartFile) { System.out.println(multipartFile); //生成唯一文件名 String newFileName = generateUniqueName(multipartFile.getOriginalFilename()); //文件在存储桶中的key String key = prefix + newFileName; //声明客户端 COSClient cosClient = null; //准备将MultipartFile类型转为File类型 File file = null; try { //生成临时文件 file = File.createTempFile("temp", null); //将MultipartFile类型转为File类型 multipartFile.transferTo(file); //初始化用户身份信息(secretId,secretKey) COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey); //设置bucket的区域 ClientConfig clientConfig = new ClientConfig(new Region(region)); //生成cos客户端 cosClient = new COSClient(cosCredentials, clientConfig); //创建存储对象的请求 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file); //执行上传并返回结果信息 PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest); return path + key; } catch (IOException e) { e.printStackTrace(); } finally { cosClient.shutdown(); } return null; } /** * 根据UUID生成唯一文件名 * * @param originalName * @return */ public String generateUniqueName(String originalName) { return UUID.randomUUID() + originalName.substring(originalName.lastIndexOf(".")); } /** * 删除文件 */ public boolean deleteFile(String fileName) { String key = prefix + fileName; COSClient cosclient = null; try { //初始化用户身份信息(secretId,secretKey) COSCredentials cosCredentials = new BasicCOSCredentials(secretId, secretKey); //设置bucket的区域 ClientConfig clientConfig = new ClientConfig(new Region(region)); // 生成cos客户端 cosclient = new COSClient(cosCredentials, clientConfig); // 指定要删除的 bucket 和路径 cosclient.deleteObject(bucketName, key); // 关闭客户端(关闭后台线程) cosclient.shutdown(); }catch (CosClientException e) { e.printStackTrace(); } return true; } }
QCloudCosUtilsConfig.java
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import studio.banner.officialwebsite.util.QCloudCosUtils; /** * 腾讯云对象存储 */ @Configuration public class QCloudCosUtilsConfig { @ConfigurationProperties(prefix = "qcloud") @Bean public QCloudCosUtils qcloudCosUtils() { return new QCloudCosUtils(); } }
controller 测试
import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import studio.banner.officialwebsite.entity.RespBean; import studio.banner.officialwebsite.service.IFileUploadService; /** * @author * @date 2021/6/6 19:42 * @role */ @RestController @Api(tags = "腾讯云上传接口", value = "TencentPhotoController") public class TencentPhotoController { protected static final Logger logger = LoggerFactory.getLogger(TencentPhotoController.class); @Autowired private IFileUploadService iFileUploadService; @PostMapping(value = "/upload") @ApiOperation(value = "腾讯云上传接口",notes = "上传图片不能为空",httpMethod = "POST") public RespBean upload(@RequestPart MultipartFile multipartFile) { String url = iFileUploadService.upload(multipartFile); return RespBean.ok("上传成功",url); } @DeleteMapping("delete") @ApiOperation(value = "腾讯云删除接口",httpMethod = "DELETE") @ApiImplicitParam(name = "fileName",value = "图片名",dataTypeClass = String.class) public RespBean delete(@RequestParam String fileName) { if (iFileUploadService.delete(fileName)){ return RespBean.ok("删除成功"); } return RespBean.error("删除失败"); } }