一、环境
java 1.8
spring boot 1.5.8
gradle3.2.1
二、COS使用示例
1. COS是腾讯云提供的对象存储服务,功能非常强大,可以作为文件服务器,CDN加速,静态网页服务,还提供了图片的常用操作。相关API文档:https://cloud.tencent.com/document/product/436/7751
2. 使用COS接口需要添加COS依赖,在build.gradle中添加依赖如下:
// 添加腾讯云COS依赖,里面的日志与 spring boot 的日志冲突,要去掉
compile group: 'com.qcloud', name: 'cos_api', version: '5.2.4'
注意:腾讯云COS依赖的日志与 spring boot 的日志冲突,需要在build.gradle中添加如下配置:
configurations {
// 去除 COS 中的日志依赖
compile.exclude group: 'org.slf4j', module: 'slf4j-log4j12'
}
3. 在application.properties配置文件中配置OSS的accessId,accessKey,endpoint,bucket和host(当然,这里也可以直接在具体代码中定义,但建议配置到配置文件中比较方便维护)
#配置腾讯云COS文件服务器
cos.secretId=AKIDRkxxxxxxxxxxxxxxxxxxxxxxx
cos.secretKey=OemBxxxxxxxxxxxxxxxxxxxxxxxxx
cos.region=ap-guangzhou
cos.bucketName=liuzh-888888888
cos.host=https://liuzh-88888888.cosgz.myqcloud.com
4. 主要代码:
/**
* 上传到腾讯云COS
* @param avatarFile
* @param userId
* @return
* @throws IOException
*/
@Override
public ResultBean uploadAvatar(MultipartFile avatarFile, Integer userId) throws IOException {
if(!avatarFile.isEmpty()){
String originalFilename = avatarFile.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
if(avatarFile.getSize() > 2 *1024 * 1024){//文件不得大于2M
logger.error("文件过大!");
return new ResultBean(false, "文件过大!");
}
// 如果文件格式正确
if(suffix.equalsIgnoreCase(".png") || suffix.equalsIgnoreCase(".jpg")){
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
ClientConfig clientConfig = new ClientConfig(new Region(region));
COSClient cosClient = new COSClient(cred, clientConfig);
ObjectMetadata objectMetadata = new ObjectMetadata();
// 指定要上传到 COS 上的路径
String key = "ititme_avatar/" + GetIDUtil.createIdByUUID() + suffix;
// 获取文件流
InputStream inputStream = avatarFile.getInputStream();
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, inputStream, objectMetadata);
PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);
// 删除上一个头像文件
deleteAvatar(userId);
// 关闭cosClient
cosClient.shutdown();
// 返回文件名和、文件路径和上传结果
String imgPath = host + "/" + key;
return new ResultBean(true, "上传文件成功!");
}else{
logger.error("文件格式不正确!");
return new ResultBean(false, "格式不正确!");
}
}
return new ResultBean(true, "文件为空!");
}
private void deleteAvatar(Integer id) {
// 删除上一个头像文件
String oldAvatar = this.selectById(id).getAvatar();
if(null != oldAvatar && !"".equals(oldAvatar)){
int index = oldAvatar.lastIndexOf("rm-avatar");
// 如果不是默认头像则删除
if(index != -1 && !"/img/default_avatar.png".equals(oldAvatar)){
String oldAvatarName = oldAvatar.substring(index);
COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
ClientConfig clientConfig = new ClientConfig(new Region(region));
COSClient cosClient = new COSClient(cred, clientConfig);
cosClient.deleteObject(bucketName, oldAvatarName);
cosClient.shutdown();
}
}
}
感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】