阿里云OSS对象存储
一,创建Bucket
1, 进入OSS的控制台,在Bucket 管理列表中,可以查看到自己的Bucket 数量,如果已经有了,则不要创建。没有的话,跟着我下面来创建一个Bucket 。
2, 点击创建Bucket ,进入到Bucket基本信息填写表单中。
3, 基本信息填写
【Bucket名称】 可以随意取,最好跟自己的项目名称有关系的名称,避免后面创建的Bucket多了分不清楚。
【地域】 可以任意选择,可以根据自己所在区域进行选择。
【Endpoint】 默认不可修改的,这个后面编写接口的时候要用到。
【所属资源组】 可以不选择。
【存储类型】 自己学习用的话,选择“低频访问选择”就可以,如果是企业项目的话,最好选择标准存储。后面的归档类型,主要是存放后就基本不访问的情况。我们这里选择“低频访问选择”。
【HDFS服务】/【同城冗余存储】/【版本控制】 这些都可以不用开启。
【读写权限】 选择“公共读”就可以,写的时候,后端接口会进行身份认证校验的。
【服务端加密方式】/【实时日志查询】 都可以不开通。
点击确定创建Bucket。
在Bucket列表就会有一条:sdms-img。
二,后端工作
2.1 引入依赖
在pom.xml文件中引入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
2.2 创建Access Key
在OSS存储对象首页概览中,最右侧中的常用入口有Access Key的入口。如果没有找到,或者在个人中心处的Access Key,也可以进入到Access Key设置页面。
点击进入Access Key,选择继续使用。
进入到Access Key列表页面,如果创建过Access Key,可以直接使用,无需创建。如果没有,点击创建,进行验证码创建即可。
创建成功后,就会有AccessKey ID和AccessKeySecret,后面需要用到。
这里建议提前保存ID 和 Secret后面可以直接使用,若关闭了需要重新使用验证码查看
2.3 配置yml文件
OSS访问常量定义: 在进行文件上传的时候,需要身份的校验,因此我们需要把身份验证的相关信息,定义在配置文件中(yml/properties)。
这里主要用到的几个信息是:endpoint、accessKeyId、accessKeySecret、bucketName。
#配置阿里云oss
aliyun:
oss:
file:
end-point: oss-cn-shenzhen.aliyuncs.com
access-key-id: LTAI5tQbJtr
access-key-secret: YTAsNTr8
bucket-name: sdms
如果找不到【endpoint】信息,可以进入你自己【Bucket 列表】,点击Bucket 名称进入到Bucket 的详情页面。选择【概览】,进入页面,下面就会有。选择外网访问中的Endpoint
2.4 编写上传逻辑代码
使用Value()注解,注入在配置文件中配的常量参数。
在filename文件中,拼接了文件目录字符串,文件目录以每日的格式进行存储。(可选,如果不设置目录的话,所有的图片对象都全部存储在根目录)
最后拼接图片访问的url,返回给前端,前端统一封装成实体类,提交给新增/更新的接口。
2.4.1 Service层
public interface IOssService {
public String uploadFile(MultipartFile file);
}
2.4.2 ServiceImpl层
@Service
public class OssServiceImpl implements IOssService{
@Value("${aliyun.oss.file.end-point}")
String endpoint;
@Value("${aliyun.oss.file.access-key-id}")
String accessKeyId;
@Value("${aliyun.oss.file.access-key-secret}")
String accessKeySecret;
@Value("${aliyun.oss.file.bucket-name}")
String bucketName;
@Override
public String uploadFile(MultipartFile file) {
String dir = DateTime.now().toString();
//获取文件名
String fileName = dir+"/"+file.getOriginalFilename();
//创建OSSClient实例
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKeySecret);
try {
//获得文件流
InputStream inputStream = file.getInputStream();
//创建putObject请求
ossClient.putObject(bucketName,fileName,inputStream);
//返回拼接后oss访问路径
String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
return url;
}catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
return null;
}catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
return null;
}catch (IOException e) {
e.printStackTrace();
return null;
}finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
三,测试
在Controller层接收前端传过来的file,调用IOSSService,成功!
在OSS管理控制层查看是否上传成功
可以发现,我们已经成功上传至OSS,到这里OSS的简单上传就结束了。
写的都是很简单的东西,记录一下第一次简单实用阿里云的OSS对象存储,大家看看就好,别喷我!!!