这是我参与8月更文挑战的第26天,活动详情查看:8月更文挑战
今天聊下OSS,接下来一段时间,我会多整理一些和SpringBoot整合的案例。应用实践,干货满满。
以后可能会分为几大专题,类似于并发专题,源码专题,面试专题等(只会分享干货)。设计专题已经结束,感兴趣的可以点击我头像看下历史文章。
话不多说,进入正题
文件处理OSS
在我们日常开发中平常都是用什么实现文件上传呢,俗称文件服务器。最早以前呢。我用过FastDfs+Nginx的方式实现文件上传与访问。
早年间我写过一篇FastDfs+Nginx的记录
CSDN链接: blog.csdn.net/yangning_/a…
随着技术的更新迭代,依赖阿里云大生态的发展OSS应用而生
-
阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务
-
可以通过简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。
使用OSS前提
你要在阿里云后台创建一套属于自己的OSS空间。这里不进行相应赘述(具体看下面官方文档),本节重点还是要放在SpringBoot上整合上
官方文档: help.aliyun.com/document_de…
那么接下来我们看SpringBoot整合OSS实现文件处理的功能
SpringBoot整合OSS
干啥都逃不过的第一步maven
<!-- 图片上传 SDK 阿里云oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.4.0</version>
</dependency>
下面是yml的配置
aliyun:
oss:
#oss对应的区域节点
endpoint: http://oss-cn-qingdao.aliyuncs.com
# 阿里对应的访问id accessId
accessKeyId: 阿里云的accessId
# 阿里对应accessKey
accessKeySecret: 阿里云的accessKey
# bucketName oss上bucket的名称
bucketName: yn-bucket-1
1、oss对应的区域节点,oss列表点击进去就可以看到,bucketName自然也可以看到,当然是你提前先创建好环境
2、 阿里对应的 (accessId,accessKeySecret)都可以看到,阿里云后台点击右上方头像
代码实现
OK 上面的一切准备就绪好之后,我们来敲代码
/**
* 操作oss工具类
* @Date 2021/8/28 11:14 下午
* @Author yn
*/
@Component
@Configuration
public class AliyunOssUtil {
@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
private OSS ossClient;
/**
* 初始化oss实例
* 单例
* @return
*/
private OSS getInstance() {
//控制并发
if(ossClient==null){
synchronized(AliyunOssUtil.class){
if(ossClient==null){
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
}
}
}
return ossClient;
}
/**
* 上传
*/
public void upload(InputStream file, String fileName){
getInstance().putObject(bucketName,fileName,file);
}
/**
* 删除文件
* @param fileName
*/
public void deleteFile(String fileName) {
OSS ossClient = getInstance();
try {
ossClient.deleteObject(bucketName, fileName);
}
catch (final Exception e) {
System.out.println("删除文件失败, 文件名称 -> "+fileName);
}
finally {
//保证能释放掉
ossClient.shutdown();
}
}
/**
* 查询文件图片列表
* @return
*/
public List<OSSObjectSummary> list() {
// 设置最大个数。
final int maxKeys = 200;
// 列举文件。
ObjectListing objectListing = getInstance().listObjects(new ListObjectsRequest(bucketName).withMaxKeys(maxKeys));
List<OSSObjectSummary> sums = objectListing.getObjectSummaries();
return sums;
}
}
我们调用下
@RestController
@RequestMapping
public class UploadController {
@Autowired
private AliyunOssUtil aliyunOssUtil;
/**
* 文件上传
*/
@RequestMapping("/upload")
public String upload(MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
/**
* 修改文件名称并保存文件
*/
String suffix = fileName.substring(fileName.lastIndexOf("."));
//随机数 防止文件名称重复
String uuid = UUID.randomUUID().toString();
fileName = uuid + suffix;
/**
* 入阿里云
*/
aliyunOssUtil.upload(file.getInputStream(),fileName);
} catch (Exception e) {
e.printStackTrace();
return "失败";
}
return "成功"
}
}
上传成功
总结
OK 看完上面的是不是感觉特别简单,省略了很多配置,其他的官方api大家可以再去尝试下一些其他的骚操作
这里注意下。尽量用随机数去命名。要不然会覆盖,不会报错