对接阿里云云存储(OSS) 分片上传最佳实践

一、整体设计时序图

名词解释:

  • 客户端:前端页面或者app客户端
  • WEB服务器:如java开发的web服务器
  • STS:STS服务,给用户颁发一个临时访问的凭证
  • OSS:对象存储
  • MPS:媒体处理服务 ,如:转码
  • MNS:消息服务,如:转码成功后通知接入方
  • IMM:智能媒体管理,如:获取媒体信息
  • Bucket:存储空间,存储空间是用户用于存储对象(Object)的容器
  • Object:对象,对象是OSS存储数据的基本单元,也被称为OSS的文件
  • ObjectKey:ObjectKey、Key以及ObjectName是同一概念,均表示对Object执行相关操作时需要填写的Object名,例如向某一存储空间上传Object时,ObjectKey表示上传的Object所在存储空间的完整名称,即包含文件后缀在内的完整路径,如填写为abc/efg/123.jpg
  • Region:Region表示OSS的数据中心所在物理位置
  • Endpoint:Endpoint表示OSS对外服务的访问域名
  • 基本概念

1、视频上传时序图
在这里插入图片描述
2、视频转码时序图
在这里插入图片描述

二、跟阿里云相关的逻辑

1、获取STS临时凭证

使用STS临时访问凭证访问OSS文档
注:按照阿里云官方文档完成配置后,仍旧无法访问OSS,原因是,需要将对应的bucket授权给用户,当然这里是授权给其他账户(即STS临时用户)Bucket授权文档

RAM角色和STS Token常见问题

STS中临时授权时出现“You are not authorized to do this action. You should be authorized by RAM“报错

2、生成上传回调参数xOssCallback和xOssCallbackVar

Callback参数构造文档

  //组装参数的相关代码
  private String getxOssCallbackVar(UploadFileCheckRequest request){
   
        JSONObject xOssCallbackVar = new JSONObject();
        xOssCallbackVar.put("x:var1", request.getVar1().toString());
        xOssCallbackVar.put("x:var2", request.getVar2().toString());
        xOssCallbackVar.put("x:var3", request.getVar3().toString());
        return Base64.getEncoder().encodeToString(xOssCallbackVar.toJSONString().getBytes());
    }

    private String getXOssCallback() {
   
        JSONObject xOssCallBack = new JSONObject();
        xOssCallBack.put("callbackUrl", "你的回调接口");
        xOssCallBack.put("callbackBody", "{\"bucket\":${bucket},\"object\":${object},\"etag\":${etag},\"size\":${size},\"mimeType\":${mimeType}," +
                                         "\"var1\":${x:var1},\"var2\":${x:var2},\"var3\":${x:var3}}");
        xOssCallBack.put("callbackBodyType", "application/json");
        return Base64.getEncoder().encodeToString(xOssCallBack.toJSONString().getBytes());
    }

将xOssCallback和xOssCallbackVar返回给客户端,客户端上传文件时,需要将这两个参数放入的header头中进行上传,上传完成后,OSS会回调你的接口,然后进行相关的业务逻辑处理。

3、分片上传

此步骤是客户端完成的,如果是浏览器进行上传的话,需要设置跨域。OSS Bucket配置跨域文档

浏览器上传示例(其中:oss的js sdk封装了InitiateMultipartUpload,MultipartUpload,CompleteMultipartUpload操作):

<!DOCTYPE html>
<head>
    <title>File upload Test</title>
</head>

<body>
<input type="file" id="file"/>
<script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.15.0.min.js"></script>
<script src="https://passport.lagou.com/static/js/jquery-1.11.1.min.js"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值