阿里云OSS云文件存储使用方式

第一步:

创建bucket,在Bucket管理或Bucket 列表中点击“创建Bucket”,弹出创建Bucket 页面

Bucket名称,又称bucket命名空间,是全局唯一的,不能重复,其他选项按自己的需求来选择

Bucket创建完成后,在bucket列表可以看到刚自己创建的Bucket

第二步:文件上传

1、在bucket列表中,点击“Bucket名称” 进入Bucket

2、进入“文件管理—>文件列表” ,点击“文件上传按钮” 来上传文件

3、文件上传后,在文件列表可以看到已经上传的文件,点击文件名称或详情按钮;

     在详情页面我们需要关注 url 模块,后期可以通过详情中的url去直接访问该文件,

    如下图所示:

4、设置阿里云访问的AccessKey管理

1)点击:用户—>选择AccessKey 管理——>弹框点击“开始使用子用户AccessKey”,进入RAM

     访问控制管理的用户管理页面

2)点击“创建用户” 来创建RAM访问的子用户

     输入 用户名称和显示名称,如:这里显示名称和用户名称一致,

     根据自己的业务场景勾选访问方式,这里勾选变成访问

注意关注:AccessKey Id 和 AccessKey Secret 的值

第二步:对创建的子用户授权

在Bucket列表选中自己需要操作的Bucket,进入 “权限控制—>Bucket 授权策略”,点击“新增授权”

按钮,对刚创建的用户进行授权

第三步:设置OSS可以跨域访问:

选中一个bucket,如 "gulimall-v001",点击“数据安全—>跨域设置—>创建规则”,配置允许跨域的请求来源;

请求来源:输入允许跨域的请求来源,“*” 表示允许所有的请求跨域

允许Methods:勾选允许跨域的请求方式

第四步:使用java上传文件

注意:java 使用oss上传文件的步骤是参考OSS官方文档,

1、在java项目中导入oss的依赖包,

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

2、编写测试代码

public void testUpload() throws com.aliyuncs.exceptions.ClientException {
       // 填写Bucket名称,
        String bucketName = "gulimall-v001";
        String objectName = "hello.txt";//在oss上显示的文件名称

        String endpoint = "oss-cn-shanghai.aliyuncs.com";
        String accessKey = "LTAI5tHB6gQG3v5BjgLtArdG";
        String secretKey = "OUtaPHhPsrWTmmvwNvLcfE9wsnT5m7";
        OSS ossClient = new OSSClientBuilder().build(endpoint,accessKey,secretKey);
        try {
            String content = "Hello OSS";

            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
        } catch (OSSException oe) {
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message:" + ce.getMessage());
            System.out.println(ce);
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        System.out.println("上传成功");
    }

第三步:spring cloud 整合OSS测试

1)引入Spring cloud oss 整合依赖(从maven 中央仓库搜索依赖)

        <!--oss 依赖
           注意:这里的版本跟 dependencyManagement中的 spring cloud alibaba依赖的版本不一样,
           所以这里要单独添加oss依赖
           oss依赖的版本是由spring-cloud-alibaba-dependencies 的版本控制的,该版本是 2.1.0.RELEASE
        -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alicloud-oss</artifactId>
        </dependency>

2)配置 access-key, secret-key 和 endpoint,如:

 #配置alibaba oss服务
    alicloud:
      access-key: LTAI5tHB6gQG3v5BjgLtAr
      secret-key: OUtaPHhPsrWTmmvwNvLcfE9wsn
      oss:
        endpoint: ss-cn-shanghai.aliyuncs.com

3)编写测试代码

/**
     * spring cloud整合oss测试:
     *
     * @throws com.aliyuncs.exceptions.ClientException
     */
    @Test
    public void testUploadForCloud() throws com.aliyuncs.exceptions.ClientException {
        // 填写Bucket名称,
        String bucketName = "gulimall-v001";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "hello.txt";//在oss上显示的文件名称

        try {
            String content = "Hello OSS";
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
        } catch (OSSException oe) {
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

在spring cloud 中获取oss签名的示例代码:

@Slf4j
@RestController
public class OssController {

    @Autowired
    private OSS ossClient;

    @Value("${spring.cloud.alicloud.oss.bucket}")
    private String bucket;
    @Value("${spring.cloud.alicloud.oss.endpoint}")
    private String endpoint;
    @Value("${spring.cloud.alicloud.access-key}")
    private String accessKey;
    @Value("${spring.cloud.alicloud.secret-key}")
    private String secret;

    /**
     * 文件上传前的获取签名以及文件上传的一些配置,
     * 在vue页面完成文件上传的操作
     * @return
     */
    @RequestMapping("/oss/policy")
    public R policy(){

        //请求oss地址:https://bucket+"."+endpoint
        String host = "https://"+bucket+"."+endpoint;
        //设置上传文件的前缀(即目录,即每天上传的文件在一个目录中)
        String format = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String dir = format+"/";

        Map<String,String> rspMap = null;
        try {
            //过期时间30s
            long expireTime = 30;
            long expireEndTime = System.currentTimeMillis()+expireTime*1000;
            Date expiration = new Date(expireEndTime);

            /**
             *
             */
            PolicyConditions policyConds = new PolicyConditions();
            policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE,0,1048576000);
            policyConds.addConditionItem(MatchMode.StartWith,PolicyConditions.COND_KEY,dir);

            String postPolicy = ossClient.generatePostPolicy(expiration,policyConds);
            byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8);
            //加密
            String encodePolicy = BinaryUtil.toBase64String(binaryData);
            //生成签名
            String signature = ossClient.calculatePostSignature(postPolicy);

            rspMap = new LinkedHashMap<String,String>();
            rspMap.put("accessId",accessKey);
            rspMap.put("host",host);
            rspMap.put("dir",dir);
            rspMap.put("policy",encodePolicy);
            rspMap.put("signature",signature);
            rspMap.put("expire",String.valueOf(expireEndTime/1000));

            //todo: 最后跨域的操作在网关统一解决

        }catch (Exception e){
            log.error(e.getMessage());
        }

        return R.ok().put("data",rspMap);
    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值