支付宝小程序:文件流上传方法

小编:啊南 2011阅读 2020.12.29

接口地址: 获取文件直传地址 (alipay.eco.file.path.query)接口与 创建合同模版(alipay.eco.doc.template.create)接口获取到的 uploadUrl。

接口描述:

  1. 使用获取文件直传地址接口获取到的 uploadUrl 进行文件流上传;

  2. 上传使用 HTTP PUT 方式上传;

  3. 上传时需要在 HTTP Header 中增加字段 Content-MD5 和 Content-Type,字段值与获取文件直传地址接口中 contentMd5 和 contentType 值保持一致,否则会出现错误码为 403 的错误。

请求参数:

  1. Content-MD5:base64 编码的文件 MD5;

  2. Content-Type:文件MIME类型,支持:

  • application/octet-stream

  • application/pdf

注意:

这里要和 创建合同模版(alipay.eco.doc.template.create)接口中的 contentType 入参值一致,不然就会有 403 的报错。

  1. HTTP BODY:待上传文件的二进制字节流。

请求示例:

PUT /ObjectName HTTP/1.1

Content-Type:application/octet-stream

Content-MD5:eB5eJF1ptWaXm4bijSPyxw==

响应示例

HTTP/1.1 200 OK

Server: AliyunOSS

Date: Tue, 04 Dec 2018 15:56:38 GMT

Content-Length: 0

Connection: keep-alive

x-oss-request-id: 5C06A3B67B8B5A3DA422299D

ETag: "D41D8CD98F00B204E9800998ECF8427E"

x-oss-hash-crc64ecma: 0

Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==

x-oss-server-time: 7

如何计算 Content-MD5?

首先计算 MD5 加密的二进制数组(128位),然后再对这个二进制数组进行base64编码(而不是对32位字符串编码)。例如,用 Python 计算 0123456789 的 Content-MD5,代码为:

>>> import base64,hashlib

>>> hash = hashlib.md5()

>>> hash.update("0123456789")

>>> base64.b64encode(hash.digest())

'eB5eJF1ptWaXm4bijSPyxw=='

关联标签: