我将大型zip文件存储在一个s3存储桶中,因此我想使用python boto3库通过块下载它们。
我首先尝试使用object.download_fileobj
方法,但是没有办法只获取对象的一部分,因此我现在使用支持s3.get
参数的PartNumber=X
方法。 / p>
然而,在我开始购买零件之前,我无法找到零件数量。 我的意思是如果我在没有给出参数中的部件号的情况下调用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':{'接受范围':'字节', ' X-AMZ-ID-2&#39 ;: ' Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai ++ kvfnZSNtQ2cSQ7wmASMZxT17xg / WJJ29xBxyUQ =&#39 ;, ' date':'周四,2017年2月23日10:55:02 GMT','最后修改':'星期四,2月23日 2017 09:53:48 GMT','服务器':' AmazonS3','内容类型': ' application / zip',' x-amz-request-id':' E67ABBE9682AE0CA', '内容长度':' 222492172',' etag': '" 493458a23b7d2ed524e8f144aa9e91f4-27"'},' HostId': ' Kymvd3rkQZFkjOdnNvbh1f0OG2zFzwJQEai ++ kvfnZSNtQ2cSQ7wmASMZxT17xg / WJJ29xBxyUQ =&#39 ;, ' HTTPStatusCode':200},' ContentLength':222492172,' ContentType': '应用程序/ zip','正文':,' 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':' bytes 0-8388607 / 222492172', ' ResponseMetadata':{' RetryAttempts':0,' RequestId': ' 2EE3109196C76834',' HTTPHeaders':{'接受范围':'字节', ' X-AMZ-ID-2&#39 ;: ' Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET + EB2fAZ4BtTDo5dqw / fJZ8PNu3vM5 / 0mTUkj9 / AqhY =&#39 ;, ' x-amz-mp-parts-count' 27',' date':'周四,2017年2月23日10:58:20 GMT& #39 ;, ' e''" 493458a23b7d2ed524e8f144aa9e91f4-27"',' content-range': '字节0-8388607 / 222492172','内容类型':' application / zip', '服务器':' AmazonS3',' x-amz-request-id':' 2EE3109196C76834', ' content-length':' 8388608',' last-modified':' Thu,2017年2月23日 09:53:48 GMT'},' HostId': ' Pl4ybedoDA99xCH2fa5zuge9Az7rPxZET + EB2fAZ4BtTDo5dqw / fJZ8PNu3vM5 / 0mTUkj9 / AqhY =&#39 ;, ' HTTPStatusCode':206},' ContentLength':8388608,' ContentType': '应用程序/ zip','正文':,' AcceptRanges':' bytes','元数据':{} }
我知道可以看到块的数量
' PartsCount':27
在开始下载文件之前,有没有办法获取块数?