【问题标题】:How to check if my uploaded file is "multipart" or not?如何检查我上传的文件是否为“多部​​分”?
【发布时间】:2020-02-13 09:03:15
【问题描述】:

来自文档:“当您使用 TransferManager 下载文件时,该实用程序会自动确定对象是否为多部分”

来源:https://aws.amazon.com/fr/blogs/developer/parallelizing-large-downloads-for-optimal-speed/

这意味着某处有指标(元数据?属性?)可以告诉您文件是否为“多部​​分”。因此,在使用 java SDK 进行测试之前,我正在使用 AWS CLI 测试 AWS Rest API,并且我专注于分段上传/下载(根据文档,仅当上传是分段的时,下载才会是分段的)。

首先我将阈值明确设置为 5MB:

$ aws configure set default.s3.multipart_threshold 5MB

我上传了一个 20 MB 的文件:

$ aws s3 cp ./my-file s3://my-bucket/test/multipart-upload-1

这需要 45 秒,当我在上传期间检查时:

$ aws s3api list-multipart-uploads --bucket my-bucket

我可以看到我的上传是列表的一部分,但我只看到一个下载,没有关于“部分”或连接数量的信息。

如果我将阈值设置为 50MB(远远超过文件大小),上传速度会快得多(超过 10 秒),并且在上传期间我看不到上传使用:

$ aws s3api list-multipart-uploads --bucket my-bucket

所以它倾向于显示第一次上传被识别为“分段”上传,但我没有关于分段数量的信息,上传后我无法区分分段上传的文件和简单上传的文件。

【问题讨论】:

    标签: python amazon-web-services amazon-s3 boto3 aws-cli


    【解决方案1】:

    通过查看 ETAG,您可以最轻松地判断对象是否是多部分的。如果 ETAG 长度超过 32 个字符,并且在末尾包含 -#,那么您就知道它是一个多部分请求。 ETag 末尾的 # 表示对象中的部分数。

    我不确定这是否在任何地方专门记录,但已使用此方法在其他 Stack Overflow 问题中成功分解:

    What is the algorithm to compute the Amazon-S3 Etag for a file larger than 5GB?

    【讨论】:

      【解决方案2】:

      要知道一个对象是否是多部分的,您可以查看ETag

      对于非多部分对象,Etag 类似于 0a3dbf3a768081d785c20b498b4abd24

      对于多部分的,Etag 看起来像 ceb8853ddc5086cc4ab9e149f8f09c88-2

      您可以使用- 字符来区分它们。

      借助 AWS CLI,您可以使用以下命令恢复对象的 Etag:

      aws s3api head-object --bucket <bucket> --key <object_key> | grep ET
      ag
      

      使用boto3,您可以像这样恢复Etag:

      from boto3 import client
      s3 = client('s3')
      print(s3.head_object(Bucket=<bucket>, Key=<object_key>)['ETag'])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 2019-11-14
        相关资源
        最近更新 更多