如何检查我上传的文件是否为“多部分”文件?

4
从文档中可以看到:“当您使用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

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

$ 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

因此,它倾向于显示第一个上传被识别为“多部分”上传,但我没有关于部件数量的信息,在上传后我无法区分多部分上传的文件和普通上传的文件。
2个回答

1
要判断一个对象是否为多部分的,您可以检查“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'])

1
您可以通过查看ETAG最容易确定对象是否为多部分。如果ETAG长于32个字符,并且以-#结尾,则知道它是多部分请求。 ETag末尾的#表示对象中的部分数量。我不确定这是否有专门的文件记录,但已经成功地在其他Stack Overflow问题中使用了此方法进行分解。如何计算大于5GB文件的Amazon-S3 Etag算法?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接