来自文档:“当您使用 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
所以它倾向于向我展示第一次上传被识别为“分段”上传,但我没有关于分段数量的信息,上传后我无法区分分段上传文件和简单上传文件。
最佳答案
通过查看 ETAG,您可以最轻松地判断一个对象是否是多部分的。如果 ETAG 超过 32 个字符,并且末尾包含一个 -#,那么您就知道这是一个多部分请求。 ETag 末尾的 # 表示对象中的部分数。
我不确定是否在任何地方专门记录了这一点,但是它已使用此方法在其他 Stack Overflow 问题中成功分解:
What is the algorithm to compute the Amazon-S3 Etag for a file larger than 5GB?
关于python - 如何检查我上传的文件是否为 "multipart"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415723/