【问题标题】:md5 checksums when uploading to file picker上传到文件选择器时的 md5 校验和
【发布时间】:2014-03-13 10:38:27
【问题描述】:

背景

我正在努力将现有应用与文件选择器集成。在我们现有的设置中,我们依靠 md5 校验和来确保数据完整性。据我所知,文件选择器在响应 REST API 上传(也不使用 JavaScript 客户端)时不提供任何 md5。

S3 存储、md5 和数据完整性

我们使用 S3 进行存储,据我所知,您可以在 storing files 时向 S3 提供 md5 校验和,以便亚马逊可以在数据似乎错误时验证并拒绝存储请求。

为确保通过网络的数据不会损坏,请使用 Content-MD5 标头。当您使用此标头时,Amazon S3 会根据提供的 MD5 值检查对象,如果不匹配,则返回错误。此外,您可以在将对象放入 Amazon S3 时计算 MD5,并将返回的 ETag 与计算的 MD5 值进行比较。

我调查了亚马逊返回的 etag 标头,发现并不清楚实际返回的 etag 是什么。 Java documentation 声明:

获取此对象内容的十六进制编码 128 位 MD5 哈希,由 Amazon S3 计算。

Ruby 文档指出:

通常,ETAG 是对象的 MD5。如果对象是使用分段上传上传的,那么这是 MD5 all of the upload-part-md5s

their documentation 的另一个地方我发现了这个:

实体标签是对象的哈希值。 ETag 仅反映对象内容的更改,而不反映其元数据。 ETag 在创建对象时确定。对于由 PUT Object 操作和 POST Object 操作创建的对象,ETag 是一个带引号的 32 位十六进制字符串,表示对象数据的 MD5 摘要。对于其他对象,ETag 可能是也可能不是对象数据的 MD5 摘要。如果 ETag 不是对象数据的 MD5 摘要,它将包含一个或多个非十六进制字符和/或包含少于 32 或多于 32 个十六进制数字。

This seems 描述 etag 是如何在 S3 上实际计算的,this stack overflow post 似乎暗示着同样的事情:不能相信 Etag 总是等于文件 MD5。

所以 - 这是我的问题

  1. 一般来说,文件选择器如何将文件存储到s3?是否使用了多部分发布请求?
  2. 我看到,当我针对例如https://www.filepicker.io/api/file/<file handle> 执行 HEAD 请求时,我确实得到了一个 etag 标头。我得到的 etag 确实与我上传的文件的 md5 匹配。返回的标头是否或多或少直接取自 S3?或者这实际上是我可以信任的 filepicker 计算的 md5?
  3. 是否可以将 md5 的显式语句返回给 File Picker API 的客户端?例如,当我们发布一个文件时,我们会返回一个 JSON 结构,包括文件的 URL 及其大小。 md5 可以包含在这里吗?
  4. 是否可以为文件选择器提供一个 md5,然后在将文件发布到 S3 时使用该 md5,以便我们可以对文件进行端到端检查?

【问题讨论】:

    标签: amazon-s3 md5 checksum data-integrity filepicker.io


    【解决方案1】:
    1. 是的,我们具体使用python boto库。
    2. ETag 是从 S3 中提取的。
    3. & 4. 已考虑并在我们的积压工作中,但尚未实施。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-07
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2012-05-18
      相关资源
      最近更新 更多