WEB端直传媒体存储流程优化实践 介绍WEB端直传媒体存储流程优化实践。 优化实践 在WEB端需要将用户的数据上传到媒体存储,常见的方法通常是让用户通过浏览器先上传文件到用户的应用服务器,然后应用服务器再上传到媒体存储。这种方案上传的中转数据需要经过用户应用服务器,传输效率低,同时在多任务上传的过程,无疑会增加应用服务器的压力。具体的上传流程如下图: 本文将介绍另外一种方案,通过在WEB端直接调用PostObject接口,将用户的文件对象直传给天翼云媒体存储。这种方案,具有传输效率高,降低用户应用服务器压力等优点。 WEB端直传媒体存储流程如下图: 在WEB端直传,我们主要基于媒体存储的post接口,用表单上传的方式,将对象上传到指定的桶里面,所以在上传之前,我们需要先创建桶。同时上传的对象文件,最大不能超过5GB。 利用post接口进行表单直传的详细具体步骤: 1.将post上传接口中基于表单上传需要发送的Policy信息,发送给应用服务器。我们假设发送给应用服务器的Policy信息,如下: {"expiration":"20231228T00:00:00Z","conditions":[{"bucket":"openapihptest"},{"key":"postdog.png"}]} 2.应用服务器收到Policy信息后,对其进行签名,然后返回给用户。 应用服务器,我们可以采用Java,Python,GoLang等语言进行开发,计算post上传的签名信息。 我们假设后端应用服务器是python开发的,使用v2签名,示例代码如下: import base64 import hmac import hashlib import binascii def sign2(key, msg): return hmac.new(bytes(key, encoding'utf8'), msg.encode("utf8"), hashlib.sha1).digest() def getSignatureKey2(key, encodepolicy): signaturebyte sign2(key, encodepolicy) return binascii.b2abase64(signaturebyte) if name "main": SK 'xxxxx' bucketName 'xx' objectKey 'xx' expirationTime "20231228T00:00:00Z" policy "{"expiration": "%s"," ""conditions": [" "{"bucket": "%s" }," "{"key":"%s"}" "]}" % (expirationTime, bucketName, objectKey) print(f"policy:{policy}") encodePolicy bytes.decode(base64.b64encode(policy.encode('utf8'))) print(f"encodePolicy:{encodePolicy}")