oss的使用

                                             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();
    }

}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值