Multipart从s3到boto3

时间:2017-02-23 12:06:42

标签: python amazon-s3 boto3

我将大型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

在开始下载文件之前,有没有办法获取块数?

1 个答案:

答案 0 :(得分:0)

您可以使用head_object来获取该号码。或者,因为您正在使用对象资源Object.parts_count