python - 如何检查我上传的文件是否为 "multipart"?

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

来自文档:“当您使用 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/

相关文章:

Python Pandas read_excel 无法识别空单元格

python - 样式表旋转框的字体无法调整大小

python - AWS Chalice,无法从POST请求获取图像

django - 在数据库中存储对 AWS S3 对象的引用的最佳实践?

python - 如果用户有多个电子邮件地址,我是否需要存储多个 oauth token ?

python - 使用线程和/或多处理同时移动多个 turtle

amazon-web-services - S3增量备份

java - 无法打开使用 spring-boot 下载的 S3 zip 文件

amazon-web-services - 使用 Amazon S3 配置 Nginx 并使用请求的 url 的位置从 S3 获取 html

amazon-web-services - 无需验证电子邮件的 Cognito