View a markdown version of this page

使用 POST 的基于浏览器的上传(Amazon 签名版本 4) - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 POST 的基于浏览器的上传(Amazon 签名版本 4)

本节讨论如何使用 HTTP POST 请求通过浏览器将文件直接上传到 Amazon S3。它还包含有关如何使用 Amazon Amplify JavaScript 库通过基于浏览器的上传将文件上传到 Amazon S3 的信息。

使用 HTTP POST 的基于浏览器的上传

Amazon S3 支持 HTTP POST 请求,以便用户可以直接将内容上传到 Amazon S3。通过使用 POST,最终用户可以对请求进行身份验证,而无需通过用于保护凭证的安全中间节点传递数据。因此,HTTP POST 有可能减少延迟。

下图演示了使用 POST 请求的 Amazon S3 上传。

S3 PUT 工作流程(客户到服务器再到 S3)与 POST 工作流程(客户直接传输到 S3)的比较。
  1. 用户通过 Web 浏览器访问您的页面。

  2. Web 页面包含一个 HTML 表单,其中包含用户将内容上传到 Amazon S3 所需的所有信息。

  3. 用户通过 Web 浏览器将内容上传到 Amazon S3。

用于发送基于浏览器的 POST 请求的过程如下:

  1. 创建安全策略,以指定条件来限制您希望请求中所支持的内容,例如,可以在其中上传对象的存储桶名称,以及对于正在创建的对象要支持的密钥名称前缀。

  2. 创建基于该策略的签名。对于经过身份验证的请求,此表单必须包含有效的签名和策略。

  3. 创建一个 HTML 表单,供用户访问以便将对象上传到您的 Amazon S3 存储桶。

下一节介绍如何创建签名来对请求进行身份验证。有关创建表单和安全策略的信息,请参阅创建 HTML 表单(使用 Amazon 签名版本 4)

计算签名

对于经过身份验证的请求,HTML 表单必须包含用于安全策略和签名的字段。

StringToSign、签名密钥以及签名。

计算签名
  1. 使用 UTF-8 编码创建策略。

  2. 将 UTF-8 编码的策略字节转换为 base64。结果为 StringToSign

  3. 创建签名密钥。

  4. 使用签名密钥,通过 HMAC-SHA256 签名算法对 StringToSign 进行签名。

有关创建 HTML 表单、安全策略和示例的更多信息,请参阅以下内容: