一、整体设计时序图
名词解释:
- 客户端:前端页面或者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授权文档
STS中临时授权时出现“You are not authorized to do this action. You should be authorized by RAM“报错
2、生成上传回调参数xOssCallback和xOssCallbackVar
//组装参数的相关代码
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"