阿里云OSS简单使用方法
在项目中有大量需要存储的图片、视频以及大文件,传统的方法是放在数据库、服务器上传下载目录、第三方FTP服务器,这些处理方法都存在一般弊端。此外传统的数据库或文件方式存储系统文件时,对于流媒体、超大文件的访问仍然无法满足应用要求;此外随文件增多,没有好的文件管理工具,对于数据备份、数据迁移,甚至当今互联网应用需要的内容分析、内容检查都是无法实现的。因此,在当前在互联网环境下,分布式OSS是比较好的解决方案。
以下是几种方法的对比:
方式 | 数据库存储 | 服务器目录 | 第三方FTP | OSS对象存储 |
---|---|---|---|---|
优点 | 使用Blob字段,使用简单 | 编写相对简单,在个服务器管理也不复杂 | 服务性能提高,管理也分开 | 分布,大对象存储,管理超大文件,支持流访问,支持内容管理 |
缺点 | 数据库会变得无比庞大,即使将blob分开存在服务器文件也不方便 | 对服务器性能有影响,服务器硬盘空间有限,增加了备份工作 | 管理工作量有一定增加,对于超大文件、流媒体管理仍不行, | 编程相对比较复杂 |
当前阿里云OSS是行业使用比较普遍的对象存储提供商,下面以阿里云OSS访问为例,介绍在Spring Boot环境下的编程方法。
一、MAVEN项目依赖
<!-- 阿里云OSS -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.1</version>
</dependency>
二、建立组件文件
@Component
public class OSSFileUtils {
protected static final Logger log = LoggerFactory.getLogger(OSSFileUtils.class);
//构建访问的参数,这几个参数放在配置文件,注意这个配置文件带有秘钥,不要上传到Git,以免密码泄漏。
@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.oss.dir.prefix}")
private String prefix;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
/**
* 单个图片上传,并返回直接能够访问的绝对路径,
* @param file
* @return,直接访问的路径
*/
public String checkFile(String baseDir, MultipartFile file){
String fileUrl = uploadFile2Oss(baseDir,file);
return fileUrl.trim();
}
/**
* 上传图片,检查图片大小,组合文件在于储路径
* @param file
* @return
*/
public String uploadFile2Oss(String baseDir, MultipartFile file) {
if (file.getSize() > 1024 * 1024 *