当前位置: 首页 > 知识库问答 >
问题:

使用Boto3(Python)将高级多部分上传到AWS Glacier?

太叔高义
2023-03-14

我需要上传一个更大的文件到 AWS 冰川的评估。由于大小,我无法在一个请求中执行此操作,因此我需要将其拆分为较小的部分并使用分段上传。

Boto3是否包含一个方法,该方法获取一个大文件,拆分并逐个上传它的部分?正如我所见Javahtml" target="_blank">客户端有这样的方法(取自AWS文档):

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

我尝试使用:

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

但它没有拆分文件,我得到一个错误。

有没有其他方法可以在不实现所有这些低级内容(拆分文件、发送多个请求、完成上传……)的情况下做到这一点?

共有2个答案

江礼骞
2023-03-14

你要找的东西在这里: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)

以上就是你要找的工作。

艾嘉石
2023-03-14

也许这就是你要找的东西?https://boto 3 . readthedocs . io/en/latest/reference/services/Glacier . html # Glacier。Client.upload_multipart_part

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

upload_multipart_part(**k war gs)

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

如果满足以下任一条件,Amazon Glacier将拒绝您的上传零件请求:

  • SHA256 树形哈希不匹配 为确保部件数据在传输过程中未损坏,请计算部件的 SHA256 树形哈希并将其包含在请求中。收到零件数据后,亚马逊冰川还会计算 SHA256 树形哈希。如果这些哈希值不匹配,则操作将失败。
  • 段大小不匹配 除最后一个部件外,每个部件的大小必须与相应的“启动多个部件上传”请求中指定的大小匹配。最后一个部件的大小必须与指定大小相同或小于指定大小。
  • 范围不对齐 请求中的字节范围值与相应启动请求中指定的段大小不对齐。例如,如果将段大小指定为 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中包含任何连字符 ('-') 。

vaultName(字符串)[必需]

保管库的名称。

uploadId(字符串)[必需]

多部分上载的上载ID。

校验和(字符串)

正在上传的数据的SHA256树哈希。

范围(字符串)

标识将在此部分中上载的汇编档案中的字节范围。Amazon Glacier使用这些信息按照正确的顺序组装档案。该报头的格式遵循RFC 2616。一个示例报头是内容范围:字节0-4194303/*。

body(字节或可查找的类似文件的对象)

要上传的数据。

 类似资料:
  • 我正在使用AWS成功地进行身份验证,并在Bucket对象上使用“put_object”方法上载文件。现在,我想使用多部分API来完成对大型文件的访问。我在这个问题中找到了公认的答案:如何使用boto3将S3对象保存到文件中 但是当试图实现时,我得到了“未知的方法”错误。我做错了什么?我的代码在下面。谢谢!

  • 我正在尝试使用node.jsaws-sdk将大文件上传到s3存储桶。 方法以分段上传方式完整上传文件。 我想使用新的V3 aws-sdk。在新版本中上传大文件的方法是什么?方法似乎没有这样做。 我见过一些方法,例如,但我似乎找不到使用它们的完整工作示例。 先谢谢你。

  • 我上传到S3使用以下代码: 我无法了解boto内部如何处理分段上传的任何信息。我对同样的事情有几个问题,让我们假设我有2.5 MB的文件: 然后文件将分3部分上传,如1,1和.5 MB? 所有3个部分将并行上传还是按顺序上传? 在java的aws库中,我们有转移管理器,在博托中有什么类似的东西吗? 此代码是否足以用于多段上传?因为我遇到了一些复杂的代码示例 任何帮助都将不胜感激。

  • 我将大的zip文件存储在s3存储桶中,因此我想使用python boto3库分块下载它们。 我首先尝试使用方法,但无法仅获取对象的一部分,因此我现在使用方法,该方法支持参数。 然而,在我开始得到零件之前,我无法找到零件的数量。我的意思是,如果我在没有给出零件号的情况下调用get,我会得到以下响应: {'ETag':'493458a23b7d2ed524e8f144aa9e91f4-27','Las

  • 嗨,我有一个问题,当我可以尝试上载一个文件的属性和元数据到alFresco 5.2使用php 5.4.3,这是我的代码: $pam['body']是这样的: 这显示此错误: 但这个错误意味着一个或多个参数是错误的,但我不知道是哪个,因为服务器有大量的磁盘空间。 有什么帮助吗?有人使用ApiRest Alfresco 5.2和PHP吗?

  • 下面是我的视图表单: 下面是视图控制器: 展厅服务: “用严”;