oss的使用
一 为什么要使用oss
以前我们上传文件时,上传到的其实是服务器,也就是tomcat中。这种当然也可以保存文件,但是他有一些问题,比如Web 应用重新部署导致文件丢失,集群环境下文件难以同步等问题。
而且你上传的文件存在tomcat中,如果文件体积太大也会影响tomcat的执行效率。所以这时候我们必须解决这些问题,你可以搭建一个文件服务器,但是这样做可能成本太高。所以如果不想这么干,那么阿里云oss就是一个不错的选择。
众所周知,阿里巴巴在国内算是顶级的公司,所以他的oss的各方面的问题都是有保证的,并且价格也不高,这是为什么要使用oss的原因。
二使用oss的步骤
1.先开通阿里云账户
2在左侧边栏找到对象存储oss
3开通oss
4 创建bucket
5在bucket中创建目录
6上传文件
三 使用Java操作oss
1创建 AccessKey
[1] 阿里云账号、密码→登录后在网页上操作
AccessKey
→
Java
程序登录
OSS
进行操作
访问密钥
AccessKey
(
AK
)相当于登录密码,只是使用场景不同。
AccessKey
用于程序方式调
用云服务
API
,而登录密码用于登录控制台。如果您不需要调用
API
,那么就不需要创建
AccessKey
。
您可以使用
AccessKey
构造一个
API
请求(或者使用云服务
SDK
)来操作资源。
AccessKey
包
括
AccessKeyId
和
AccessKeySecret
。
AccessKeyId
用于标识用户,相当于账号。
AccessKeySecret
是用来验证用户的密钥。
AccessKeySecret
必须保密。
警告 禁止使用主账号
AK
,因为主账号
AK
泄露会威胁您所有资源的安全。请使用子账号(
RAM
用户)
AK
进行操作,可有效降低
AK
泄露的风险。
[2]
创建子账号
AK
的操作步骤
1.
使用主账号登录
RAM
管理控制台。
2.
如果未创建
RAM
用户,在左侧导航栏,单击用户管理,然后单击新建用户,创建
RAM
用
户。如果已创建
RAM
用户,跳过此步骤。
3.
在左侧导航栏,单击用户管理,然后单击需要创建
AccessKey
的用户名,进入用户详情页
面。
4.
在用户
AccessKey
区域,单击创建
AccessKey
。
5.
完成手机验证后,在新建用户
AccessKey
页面,展开
AccessKey
详情,查看
AcessKeyId
和
AccessKeySecret
。然后单击保存
AK
信息,下载
AccessKey
信息。
注意
AccessKey
创建后,无法再通过控制台查看。请您妥善保存
AccessKey
,谨防泄露。
6.
单击该
RAM
用户对应的授权,给
RAM
用户授予相关权限,例如
AliyunOSSFullAccess
将给
RAM
用户授予
OSS
的管理权限
截图:
![](https://i-blog.csdnimg.cn/blog_migrate/9671389917032f206356ce8b93f2a131.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4571d7fe8ea1a84afb7ff765f9a7992b.png)
将oss引入项目
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OSSProperties {
private String endPoint;
private String bucketName;
private String accessKeyId;
private String accessKeySecret;
private String bucketDomain;
}
application.yml:
aliyun: oss: access-key-id: LTAI5tFzwkVA55VoAtwowxGX access-key-secret: D9F1Hfrss4KqlgQ9SYgv1qH7dznPg4 bucket-domain: track115.oss-cn-beijing.aliyuncs.com bucket-name: track115 end-point: oss-cn-beijing.aliyuncs.com
加入依赖:
<!-- OSS
客户端
SDK -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.5.0</version>
</dependency>
util工具类方法,在阿里云网站找,然后更改:
public static ResultEntity<String> uploadFileToOSS( String endPoint, String accessKeyId, String accessKeySecret, InputStream inputStream, String bucketName, String bucketDomain, String originalName ){ // 创建OSSClient实例 OSS ossClient = new OSSClientBuilder().build(endPoint,accessKeyId,accessKeySecret); // 生成上传文件的目录,按照日期来划分目录 String folderName = new SimpleDateFormat("yyyyMMdd").format(new Date()); // 生成上传文件在OSS服务器上保存的文件名,通过uuid生成随机uuid,将其中的“-”删去(替换成空字符串) String fileMainName = UUID.randomUUID().toString().replace("-", ""); // 从原始文件名中获取文件扩展名 String extensionName = originalName.substring(originalName.lastIndexOf(".")); // 使用目录、文件主体名称、文件扩展名拼接得到对象名称 String objectName = folderName + "/" + fileMainName + extensionName; try { // 调用OSS客户端对象的方法上传文件并获取响应结果数据 PutObjectResult putObjectResult = ossClient.putObject(bucketName,objectName,inputStream); // 从响应结果中获取具体的响应消息 ResponseMessage responseMessage = putObjectResult.getResponse(); // 根据响应状态判断是否成功 if (responseMessage == null) { // 拼接访问刚刚上传的文件的路径 String ossFileAccessPath = bucketDomain + "/" + objectName; // 返回成功,并带上访问路径 return ResultEntity.successWithData(ossFileAccessPath); }else { // 获取响应状态码 int statusCode = responseMessage.getStatusCode(); // 没有成功 获取错误消息 String errorMessage = responseMessage.getErrorResponseAsString(); return ResultEntity.failed("当前响应状态码=" + statusCode + " 错误消息=" + errorMessage); } } catch (Exception e){ e.printStackTrace(); return ResultEntity.failed(e.getMessage()); } finally { // 关闭OSSClient ossClient.shutdown(); } }