一、环境
java 1.8
spring boot 1.5.8
gradle3.2.1
二、OSS使用示例
1. OSS是阿里云提供的对象存储服务,功能非常强大,可以作为文件服务器,还提供了图片的常用操作。相关API文档:https://help.aliyun.com/document_detail/31947.html
2. 使用OSS接口需要添加OSS依赖,在build.gradle中添加依赖如下:
// 添加阿里云OSS服务的依赖
compile group: 'com.aliyun.oss', name: 'aliyun-sdk-oss', version: '2.8.2'
3. 在application.properties配置文件中配置OSS的accessId,accessKey,endpoint,bucket和host(当然,这里也可以直接在具体代码中定义,但建议配置到配置文件中比较方便维护)
#配置阿里云OSS文件服务器
oss.accessId=LTAII5Odxxxxxx
oss.accessKey=5FnVDhDjI1Fxxxxxxx
oss.endpoint=http://oss-cn-shenzhen.aliyuncs.com
oss.rm.bucket=rm
oss.rm.host=http://rm.oss-cn-shenzhen.aliyuncs.com
4. 主要代码:
@Value("${oss.accessId}")
private String accessId; //将配置文件的oss.accessId绑定为accessId
@Value("${oss.accessKey}")
private String accessKey; //将配置文件的oss.accessKey绑定为accessKey
@Value("${oss.endpoint}")
private String endpoint; //将配置文件的oss.endpoint绑定为endpoint
@Value("${oss.rm.bucket}")
private String bucket; //将配置文件的oss.rm.bucket绑定为bucket
@Value("${oss.rm.host}")
private String host; //将配置文件的oss.rm.host绑定为host
/**
* 上传到阿里云OSS
* @param avatarFile
* @param userId
* @return
* @throws IOException
*/
@Override
public Response uploadAvatar(MultipartFile avatarFile, Integer userId) throws IOException {
if(!avatarFile.isEmpty()){
String originalFilename = avatarFile.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
if(avatarFile.getSize() > 1 *1024 * 1024){//文件不得大于2M
logger.error("文件过大!");
return new Response(false, "文件过大!");
}
// 如果文件格式正确
if(suffix.equalsIgnoreCase(".png") || suffix.equalsIgnoreCase(".jpg")){
// 创建OSSClient实例
OSSClient ossClient = new OSSClient(endpoint, accessId, accessKey);
// 创建ObjectMetadata实例
ObjectMetadata meta = new ObjectMetadata();
meta.setContentType("image/" + suffix);
// 上传文件流
InputStream inputStream = avatarFile.getInputStream();
String fileName = "rm-avatar/" + GetIDUtil.createIdByUUID() + suffix;
ossClient.putObject(bucket, fileName, inputStream);
// 删除上一个头像文件
String oldAvatar = this.selectById(userId).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);
ossClient.deleteObject(bucket, oldAvatarName);
}
}
// 关闭client
ossClient.shutdown();
// 返回文件名和、文件路径和上传结果
String imgPath = host + "/" + fileName;
return new Response(true, "上传文件成功!", imgPath);
}else{
logger.error("文件格式不正确!");
return new Response(false, "格式不正确!");
}
}
return new Response(true, "文件为空!", null);
}
感谢您的阅读,欢迎参观我的个人网站:小嗨词典【 https://www.happydict.cn】