【发布时间】:2017-07-13 21:49:36
【问题描述】:
我将大 zip 文件存储在 s3 存储桶中,因此我想使用 python boto3 库分块下载它们。
我首先尝试使用 object.download_fileobj 方法,但无法仅获取对象的一部分,因此我现在使用支持 PartNumber=X 参数的 s3.get 方法。
但是,在我开始获取零件之前,我无法找到零件的数量。 我的意思是,如果我在参数中没有给出部件号的情况下调用 get,我会得到以下响应:
s3.Object('mybucket', 'mytest.zip').get()
{'ETag': '"493458a23b7d2ed524e8f144aa9e91f4-27"', 'LastModified': datetime.datetime(2017, 2, 23, 9, 53, 48, tzinfo=tzutc()), 'ResponseMetadata': {'RetryAttempts': 0, 'RequestId': 'E67ABBE9682AE0CA', 'HTTPHeaders': {'accept-ranges': 'bytes', 'x-amz-id-2': 'Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai++kvfnZSNtQ2cSQ7wmASMZxT17xg/WJJ29xBxyUQ=', '日期':'星期四,2017 年 2 月 23 日 10:55:02 GMT','最后修改':'星期四,2 月 23 日 2017 年 09:53:48 GMT','服务器':'AmazonS3','内容类型': '应用程序/zip','x-amz-request-id':'E67ABBE9682AE0CA', '内容长度':'222492172','etag': '"493458a23b7d2ed524e8f144aa9e91f4-27"'}, 'HostId': 'Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai++kvfnZSNtQ2cSQ7wmASMZxT17xg/WJJ29xBxyUQ=', 'HTTPStatusCode':200},'ContentLength':222492172,'ContentType': 'application/zip', 'Body': , 'AcceptRanges': 'bytes', '元数据': {}}
我们可以看到这里没有PartCount
如果我也这样做,但使用PartNumber=1:
s3.Object('mybucket', 'mytest.zip').get(PartNumber=1)
{'ETag': '"493458a23b7d2ed524e8f144aa9e91f4-27"', 'LastModified': datetime.datetime(2017, 2, 23, 9, 53, 48, tzinfo=tzutc()), 'PartsCount':27,'ContentRange':'字节 0-8388607/222492172', 'ResponseMetadata': {'RetryAttempts': 0, 'RequestId': '2EE3109196C76834', 'HTTPHeaders': {'accept-ranges': 'bytes', 'x-amz-id-2': 'Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET+EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=', “x-amz-mp-parts-count”:“27”,“日期”:“2017 年 2 月 23 日星期四 10:58:20 GMT”, 'etag': '"493458a23b7d2ed524e8f144aa9e91f4-27"', '内容范围': '字节 0-8388607/222492172', '内容类型': '应用程序/zip', '服务器':'AmazonS3','x-amz-request-id':'2EE3109196C76834', “内容长度”:“8388608”,“最后修改”:“2017 年 2 月 23 日,星期四 09:53:48 GMT'},'HostId': 'Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET+EB2fAZ4BtTDo5dqw/fJZ8PNu3vM5/0mTUkj9/AqhY=', 'HTTPStatusCode':206},'ContentLength':8388608,'ContentType': 'application/zip', 'Body': , 'AcceptRanges': 'bytes', '元数据': {}}
我知道可以看到块的数量
“零件数”:27
有没有办法在我开始下载文件之前获取块的数量?
【问题讨论】: