当前位置: 首页 > 知识库问答 >
问题:

上传到文件选取器时的 MD5 校验和

狄子真
2023-03-14

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

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

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

我研究了Amazon返回的etag头,发现并不清楚etag实际返回的是什么。Java文档指出:

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

Ruby文档说明:

通常,ETAG是对象的MD5。如果对象是使用多部分上传上传的,则这是MD5全部上传部分MD5

在他们的文档中的另一个地方,我发现了这个:

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

这似乎描述了etag实际上是如何在S3上计算的,而这个堆栈溢出帖子似乎暗示了同样的事情:不能相信etag总是等于文件MD5。

  1. 通常,文件选取器如何将文件存储到 s3?是否使用分段发布请求?
  2. 当我对例如 https://www.filepicker.io/api/file/ 进行 HEAD 请求时,我看到了这一点

共有1个答案

马华茂
2023-03-14
  1. 是的,我们使用python boto库来具体说明。
  2. ETag从S3中提取。
 类似资料:
  • 问题内容: 我正在寻找使用Java获取文件的MD5校验和。我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西。 怎么做? 问题答案: 有一个输入流装饰器,因此你可以像往常一样在使用输入流的同时计算摘要,而不必对数据进行额外的传递。

  • 接口说明 校验要上传的文件的每一个文件分片 API地址 POST /api/upload/1.0.0/md5 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 fileName string form 是 数据标识 menuId string form 是 权限id,值为31 响应字段说明 参数 类型 说明 guid String 文件id md5_arr String 逗号分

  • 我正在使用iTextSharp从PDF文件中读取文本。然而,有些时候我不能提取文本,因为PDF文件只包含图像。我每天下载同样的PDF文件,我想看看PDF是否被修改过。如果无法获得文本和修改日期,那么MD5校验和是判断文件是否已更改的最可靠方法吗? 如果是的话,一些代码示例将会很感激,因为我对密码学没有太多的经验。

  • 问题内容: 我正在为大型视频文件创建MD5校验和。我当前正在使用代码: 但这会创建一个内存缓冲区,并且对于大型视频文件而言并不理想。Swift中是否有一种方法可以计算读取文件流的MD5校验和,从而使内存占用量最小? 问题答案: 您可以分块计算MD5校验和,例如在?中有没有一个MD5库不需要同时输入全部内容?。 这是使用Swift的可能实现(现已针对Swift 5更新) 需要自动释放池来释放所返回的

  • 我想创建一个Ruby程序,它可以尽可能快地将文件从SD卡复制到硬盘上,但也可以创建源文件和目标文件的md5校验和,以确保数据的完整性。 我相信以块的形式读取文件并创建校验和会比

  • 我正在编写一个应用程序,其中要求将文件从远程SFTP服务器传输到本地计算机,反之亦然。在文件传输过程中,我想确保没有数据包在传输过程中丢失和损坏。因此,我们的想法是在传输之前对远程文件(位于sftp服务器中)运行MD5校验和,然后启动传输过程。传输完成后,在本地文件上运行md5并比较两个校验和。 我正在使用JSCH连接到sftp服务器,代码是java。但是我不知道如何在SFTP服务器中的远程文件上