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 的管理权限
截图:
将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();
}
}