【问题标题】:High level multipart upload with Boto3 (Python) to AWS Glacier?使用 Boto3 (Python) 将高级分段上传到 AWS Glacier?
【发布时间】:2017-09-05 17:32:36
【问题描述】:

我需要将更大的文件上传到 AWS Glacier 的 valut。由于大小我无法在一个请求中完成,所以我需要将其拆分为更小的部分并使用分段上传。

Boto3 是否包含一个获取大文件的方法,将其拆分并逐个上传? 正如我所见,Java 客户端有这样的方法(取自 AWS 文档):

高级 API 提供了一种方法,您可以使用该方法上传任何大小的档案。根据您上传的文件,该方法可以在单个操作中上传档案,也可以使用 Amazon Glacier 中的分段上传支持分段上传档案。

我试过用:

boto3.client(...).upload_archive(...)

但是不拆分文件,我得到一个错误。

在不实现所有这些低级内容(拆分文件、发送多个请求、完成上传...)的情况下,还有其他方法吗?

【问题讨论】:

  • 请寻找使用s3transfer config boto3.readthedocs.io/en/latest/reference/customizations/…的upload_file()/upload_fileobj() 配置参数
  • @mootmoot 我需要将其发送到 AWS Glacier,而不是 AWS S3。
  • 冰川模块不使用 s3 传输。你可以在这里问你问题/请求:github.com/boto/boto3 虽然你可以使用 S3 作为解决方法。即使用 s3 上传,并将生命周期传输设置为 Glacier 1 天。
  • @mootmoot 是的,我知道它没有。这就是我的观点。我对这里的 S3 不感兴趣......即使作为一种解决方法。

标签: python amazon-web-services boto3 amazon-glacier


【解决方案1】:

您正在寻找的内容在这里: https://github.com/tbumi/glacier-upload/blob/develop/main.py

response = glacier.complete_multipart_upload(
    vaultName=vault_name, uploadId=upload_id,
    archiveSize=str(file_size), checksum=total_tree_hash)

以上内容可以满足您的需求。

【讨论】:

    【解决方案2】:

    也许这就是您要找的东西? https://boto3.readthedocs.io/en/latest/reference/services/glacier.html#Glacier.Client.upload_multipart_part

    我将从文档中添加一些相关信息。

    upload_multipart_part(**kwargs)

    此操作会上传存档的一部分。您可以按任何顺序上传存档部分。您也可以并行上传它们。对于分段上传,您最多可以上传 10,000 个部分。

    Amazon Glacier 拒绝您的上传部分请求,如果 以下条件为真:

    • SHA256树哈希不匹配确保部分数据不匹配 在传输中损坏,您计算该部分的 SHA256 树哈希 并将其包含在您的请求中。收到零件数据后,亚马逊 Glacier 还计算 SHA256 树哈希。如果这些哈希值不 匹配,操作失败。
    • 零件尺寸不匹配尺寸 除最后一个部分外,每个部分的尺寸必须与指定的尺寸相匹配 相应的 InitiateMultipartUpload 请求。最后一个尺寸 零件的尺寸必须与指定尺寸相同或小于指定尺寸。
    • 范围不对齐请求中的字节范围值不对齐 与相应启动中指定的零件尺寸对齐 要求。例如,如果您指定的部分大小为 4194304 字节(4 MB),然后是 0 到 4194303 字节 (4 MB - 1) 和 4194304 (4 MB) 到 8388607 (8 MB - 1) 是有效的零件范围。但是,如果您将范围值设置为 2 MB 到 6 MB,范围与零件大小和 上传将失败。

    这里是请求语法

    response = client.upload_multipart_part(
    vaultName='string',
    uploadId='string',
    range='string',
    body=b'bytes'|file
    

    )

    及参数说明

    accountId(字符串)

    AccountId 值是拥有保管库的账户的 AWS 账户 ID。您可以指定一个 AWS 账户 ID,也可以选择指定一个“-”(连字符),在这种情况下,Amazon Glacier 使用与用于签署请求的凭证关联的 AWS 账户 ID。如果您使用帐户 ID,请勿在 ID 中包含任何连字符 ('-')。

    保管库名称(字符串) [必填]

    保管库的名称。

    uploadId(字符串) [必填]

    分段上传的上传ID。

    校验和(字符串)

    上传数据的 SHA256 树哈希。

    范围(字符串)

    标识将在此部分中上传的组合存档中的字节范围。 Amazon Glacier 使用此信息以正确的顺序组装档案。此标头的格式遵循 RFC 2616。示例标头是 Content-Range:bytes 0-4194303/*。

    body(字节或可搜索的文件类对象)

    要上传的数据。

    【讨论】:

    • 考虑在此处添加信息,而不仅仅是一个链接。如果网址发生变化,这将使问题保持​​有用。
    猜你喜欢
    • 2015-09-05
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2018-09-01
    相关资源
    最近更新 更多