OSS
阿里云对象存储OSS(Object Storage Service)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音视频在内的各类数据文件。
OSS中相关概念
Endpoint:访问域名,通过该域名可以访问OSS服务的API,进行文件上传、下载等操作。
Bucket:存储空间,是存储对象的容器,所有存储对象都必须隶属于某个存储空间。
Object:对象,对象是 OSS存储数据的基本单元,也被称为 OSS 的文件。
AccessKey:访问密钥,指的是访问身份验证中用到的AccessKeyId 和 AccessKeySecret。
整合OSS实现文件上传
一、添加依赖
<!-- OSS SDK 相关依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.8.0</version>
</dependency>
二、修改配置文件
aliyun:
oss:
endpoint: xtslife-oss.oss-cn-chengdu.aliyuncs.com # oss对外服务的访问域名
accessKeyId: test # 访问身份验证中用到用户标识
accessKeySecret: test # 用户用于加密签名字符串和oss用来验证签名字符串的密钥
bucketName: xtslife-oss # oss的存储空间
policy:
expire: 300 # 签名有效期(S)
maxSize: 10 # 上传文件大小(M)
callback: http://localhost:8080/aliyun/oss/callback # 文件上传成功后的回调地址
dir:
prefix: xtslife/images/ # 上传文件夹路径前缀
注意:
1、endpoint、accessKeyId、accessKeySecret、bucketName、callback、prefix都要改为你自己帐号OSS相关的,callback需要是公网可以访问的地址。
2、web文件上传大小受spring.servlet.multipart.max-file-size和spring.servlet.multipart.max-request-size配置影响。
Spring配置
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: dev
# 文件上传
servlet:
multipart:
# 单个文件大小
max-file-size: 50MB
# 设置总上传的文件大小
max-request-size: 100MB
三、代码实现
1、文件上传
本次使用的是PutObject方法来上传单个文件(Object),属于OSS上传方式中的简单上传。简单上传适用于一次HTTP请求交互即可完成上传的场景,例如小文件(小于5 GB)的上传。
/**
* 文件上传
* @param file
* @return
*/
public Map<String, Object> uploadFile (@Nullable MultipartFile file) {
Map<String, Object> map = new HashMap<>();
String fileExt = FileUtil.extName(file.getOriginalFilename());
SimpleDateFormat sm = new SimpleDateFormat("yyyy/MM");
String today = sm.format(new Date());
String fileKey = BASE_FILE_PATH + "/" + today +"/"+getCurrentDate()+"."+fileExt;
OSSClient ossClient = getOssClient();
try {
// 文件存储入OSS,Object的名称为fileKey。详细请参看“SDK手册 > Java-SDK > 上传文件”。
// 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
ossClient.putObject(bucketName, fileKey, file.getInputStream());
log.info("上传文件:" + fileKey + "存入OSS成功。");
} catch (Exception e) {
log.warn("上传文件异常,errMsg = {}", e);
} finally {
ossClient.shutdown();
}
map.put("fileUrl",fileKey);
map.put("url",getUrl(fileKey,ossClient));
return map;
}
2、创建OSSClient实例
在此处可通过ClientConfiguration配置OSS连接配置。
private OSSClient getOssClient() {
return new OSSClient(endpoint,
new DefaultCredentialProvider(accessKeyId,secretAccessKey),
new ClientConfiguration());
}
3、获取URL
如果想通过链接访问你保存的文件,可使用以下方法生成外链
private String getUrl(String fileKey, OSSClient ossClient) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
// 生成URL
URL url = ossClient.generatePresignedUrl(bucketName, fileKey, expiration);
if (url != null) {
log.info(fileKey + "生成的访问路径为:"+ url);
return url.toString();
}
return null;
}
4、删除OSS文件
如果你想删除OSS上保存的文件,可通过deleteObject方法来删除,在此方法上必要条件是保存时的文件内部路径。
public void deleteFile (String fileKey) {
OSSClient ossClient = getOssClient();
try {
// 删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。
// 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
ossClient.deleteObject(bucketName, fileKey);
log.info("删除文件:" + fileKey + "删除OSS成功。");
} catch (Exception e) {
log.warn("删除文件异常,errMsg = {}", e);
} finally {
ossClient.shutdown();
}
}
本文介绍了如何使用Java整合阿里云OSS服务进行文件上传。首先,详细解释了OSS中的Endpoint、Bucket和Object等核心概念,接着讲述了添加依赖、修改配置文件的步骤,并提供了Spring配置示例。在代码实现部分,展示了使用PutObject方法进行简单上传,以及创建OSSClient、获取文件外链和删除OSS文件的方法。
5191

被折叠的 条评论
为什么被折叠?



