WEB端直传媒体存储流程优化实践 计算签名 signature getSignatureKey2(SK,encodePolicy) print(f"signature:{signature}") 如果使用v4签名,请参考SDK和Demo相关代码: SDK概览 3.准备表单HTML页面。 表单HTML页面代码示例如下: key 注意: (1)html表单中的Policy值需要为base64编码后的值。 (2) html表单中的signature值为你应用服务器的返回的签名结果。 4.选择你需要上传的本地文件,然后进行表单上传。 常见问题 跨域问题:当出现跨域问题的时候,请参考跨域资源共享对其进行配置。 参考post接口API相关文档描述,如果桶为publicreadwrite,那么Policy可以为空。桶权限非publicreadwrite时,Policy不能为空,其值在鉴权时需要用到。如果Policy为空,那么AWSAccessKeyId和signature都可以为空,如果Policy不为空,那么就需要同时填入AWSAccessKeyId和signature字段。 为避免造成AK/SK泄露,不建议直接在WEB端签名,可在后端直接计算预签名URL,然后前端使用预签名URL授权访问媒体存储。 这里以应用服务器使用python计算预签名URL,前端使用临时URL访问媒体存储为例。 利用python在应用服务端计算预签名URL: import botocore.config import botocore.session import botocore.signers def generateputobjectpresignedurl(accesskey, secretkey, endpoint, bucket,key,region): config botocore.config.Config(signatureversion's3v4') session botocore.session.getsession() s3client session.createclient( 's3', awsaccesskeyidaccesskey, awssecretaccesskeysecretkey, endpointurlendpoint, regionnameregion, configconfig) expirationtime 3600