上一篇:springboot2.2.X手册:对象复制哪种最快?7种复制方式性能对比
今天有个非常巧合的机会,无意间发现阿里云的OSS一年只需要9块钱,5年只需要45块钱,有40G容量,这是什么概念?在送人吗?赶紧撸一把,有可能是我以前没发现,但是我记得以前好贵的~~~
海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%的数据可靠性。使用RESTful API 可以在互联网任何位置存储和访问,容量和处理能力弹性扩展,多种存储类型供选择全面优化存储成本。
可以私信我获取优惠券,发送:优惠券
引入ossClient包
com.aliyun.oss
aliyun-sdk-oss
3.9.1
commons-fileupload
commons-fileupload
1.4
org.springframework.boot
spring-boot-starter-web
/**
* 阿里云oss属性配置
* @author:溪云阁
* @date:2020年5月16日
*/
@Component
@ConfigurationProperties(prefix = "module.boots.oss")
@Data
public class AliyunOSSProperties {
// oss上bucket的名称
private String bucketName;
// 阿里对应的访问id
private String accessKeyId;
// 阿里对应的密钥
private String accessKeySecret;
// oss对应的区域节点
private String endpoint;
}
/**
* OSS文件上传工具
* @author:溪云阁
* @date:2020年5月16日
*/
@Component
@Slf4j
public class AliyunOssUtils {
@Autowired
private AliyunOSSProperties properties;
/**
* 上传文件到阿里云 OSS 服务器
* @author 溪云阁
* @param files 文件
* @param fileTypeEnum 文件类型
* @return List
*/
public List uploadFile(MultipartFile[] files, String storagePath, FileTypeEnum fileTypeEnum) {
// 创建OSSClient实例
final OSS ossClient = new OSSClientBuilder().build(properties.getEndpoint(), properties.getAccessKeyId(), properties.getAccessKeySecret());
final List fileIds = new ArrayList<>();
try {
for (final MultipartFile file : files) {
// 创建一个唯一的文件名,类似于id,就是保存在OSS服务器上文件的文件名(自定义文件名)
String fileName = IdUtil.randomUUID();
final InputStream inputStream = file.getInputStream();
// 设置对象
final ObjectMetadata objectMetadata = new ObjectMetadata();
// 设置数据流里有多少个字节可以读取
objectMetadata.setContentLength(inputStream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentDisposition("inline;filename=" + fileName);
fileName = storagePath + "/" + fileName;
// 上传文件
final PutObjectResult result = ossClient.putObject(properties.getBucketName(), fileName, inputStream, objectMetadata);
log.info("Aliyun OSS AliyunOSSUtil.uploadFileToAliyunOSS,result:{}", result);
}
}
catch (final IOException e) {
log.error("Aliyun OSS AliyunOSSUtil.uploadFileToAliyunOSS fail,reason:{}", e);
}
finally {
ossClient.shutdown();
}
return fileIds;
}
/**
* 删除文件
* @author 溪云阁
* @param fileName void
*/
public void deleteFile(String fileName) {
final OSS ossClient = new OSSClientBuilder().build(properties.getEndpoint(), properties.getAccessKeyId(), properties.getAccessKeySecret());
try {
ossClient.deleteObject(properties.getBucketName(), fileName);
}
catch (final Exception e) {
log.error("{}", e.fillInStackTrace());
}
finally {
ossClient.shutdown();
}
}
/**
* 判断文件是否存在
* @author 溪云阁
* @param fileName 文件名称
* @return boolean
*/
public boolean doesObjectExist(String fileName) {
final OSS ossClient = new OSSClientBuilder().build(properties.getEndpoint(), properties.getAccessKeyId(), properties.getAccessKeySecret());
try {
if (Strings.isEmpty(fileName)) {
log.error("文件名不能为空");
return false;
} else {
final boolean found = ossClient.doesObjectExist(properties.getBucketName(), fileName);
return found;
}
}
finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
/**
* 文件类型枚举
* @author:溪云阁
* @date:2020年5月16日
*/
public enum FileTypeEnum {
IMG(1, "图片"),
AUDIO(2, "音频"),
VIDEO(3, "视频"),
APP(4, "App包"),
OTHER(5, "其他");
private Integer code;
private String message;
FileTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
}
com.boots
module-boots-oss
1.0.0.RELEASE
com.boots
module-boots-api
1.0.0.RELEASE
#oss上bucket的名称
module.boots.oss.bucketName: "bucket-boots"
#阿里对应的访问id
module.boots.oss.accessKeyId: "阿里云的accessId"
#阿里对应的密钥
module.boots.oss.accessKeySecret: "阿里云的accessKey"
#oss对应的区域节点
module.boots.oss.endpoint: "http://oss-cn-shenzhen.aliyuncs.com"
#上传文件总的最大值
spring.servlet.multipart.max-request-size: 10MB
#单个文件的最大值
spring.servlet.multipart.max-file-size: 10MB
/**
* 文件服务接口
* @author:溪云阁
* @date:2020年5月17日
*/
@Api(tags = { "OSS服务:文件接口" })
@RestController
@RequestMapping("web/Oss")
public class OssController {
@Autowired
private AliyunOssUtils ossUtils;
/**
* 上传文件
* @author 溪云阁
* @param files
* @return List
*/
@ApiOperation(value = "上传文件")
@PostMapping(value = "/uploadFiles")
@SneakyThrows(CommonRuntimeException.class)
public List uploadFiles(@RequestParam("files") MultipartFile[] files) {
return ossUtils.uploadFile(files, "imgs", FileTypeEnum.IMG);
}
}
搞定,这个5年45块钱,买的真开心
--END--
作者:@溪云阁
如需要源码,转发,关注后私信我。
部分图片或代码来源网络,如侵权请联系删除,谢谢!