Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何使用 AWS CLI 将大文件分段上传到 Amazon S3?
我想将大文件分段复制到 Amazon Simple Storage Service(Amazon S3)桶,或者使用分段上传。我想使用 AWS 命令行界面(AWS CLI)上传文件。
简短描述
通过 AWS CLI 使用高级别 aws s3 命令或低级别 aws s3api 命令将大文件上传到 Amazon S3。有关这两个命令层的详细信息,请参阅结合使用 Amazon S3 与 AWS CLI。
**重要事项:**最佳做法是使用 aws s3 命令(如 aws s3 cp)进行分段上传和下载。这是因为 aws s3 命令会根据文件大小自动执行分段上传和下载。仅当 aws s3 命令不支持特定上传时,才使用 aws s3api 命令(如 aws s3api create-multipart-upload)。例如,分段上传涉及多个服务器,或者您手动停止分段上传,稍后再恢复。或者,aws s3 命令不支持必需的请求参数。
解决方法
**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
在上传文件之前,计算文件的 MD5 校验和值,作为上传后进行完整性检查的参考。
使用高级别 aws s3 命令
要使用高级别 aws s3 命令进行分段上传,请运行以下命令:
$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/
此示例使用命令 aws s3 cp 在对象较大时自动执行分段上传。您还可以使用其他涉及将对象上传到 S3 桶的 aws s3 命令。例如,aws s3 sync 或 aws s3 mv。
您分段上传到 Amazon S3 的对象的 ETag 格式与您使用传统 PUT 请求上传的对象不同。要存储源文件的 MD5 校验和值作为参考,上传文件时,请将校验和值作为自定义元数据。要添加 MD5 校验和值作为自定义元数据,请在上传命令中加入可选参数 --metadata md5="examplemd5value1234/4Q":
$ aws s3 cp large_test_file s3://DOC-EXAMPLE-BUCKET/ --metadata md5="examplemd5value1234/4Q"
要使用更多主机的带宽和资源,请增加 AWS CLI 配置中设置的最大并发请求数。默认情况下,AWS CLI 最多使用 10 个并发请求。此命令将最大并发请求数设置为 20:
$ aws configure set default.s3.max_concurrent_requests 20
使用低级别 aws s3api 命令
-
将要上传的文件分成多个分段。
**提示:**如果您使用的是 Linux 操作系统,请使用 split 命令。 -
运行以下命令启动分段上传并检索相关联的上传 ID。
aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file
该命令会返回一个包含 UploadID 的响应:
-
复制 UploadID 值作为后续步骤的参考。
-
运行以下命令上传文件的第一个分段。
aws s3api upload-part --bucket DOC-EXAMPLE-BUCKET --key large_test_file --part-number 1 --body large_test_file.001 --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk --content-md5 exampleaAmjr+4sRXUwf0w==
将所有值替换为您的桶、文件和分段上传的值。该命令会返回的一个响应,其中包含您上传的文件分段的 ETag 值。有关每个参数的详细信息,请参阅 upload-part。
-
复制 ETag 值作为后续步骤的参考。
-
对每个文件分段重复步骤 4 和 5。确保上传的每个新分段的分段编号依次增加。
-
上传所有文件分段后,运行以下命令列出上传的分段并确认列表完整:
aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
-
将您上传的每个文件分段的 ETag 值编译为 JSON 格式的文件。
JSON 文件示例:{ "Parts": [{ "ETag": "example8be9a0268ebfb8b115d4c1fd3", "PartNumber":1 }, .... { "ETag": "example246e31ab807da6f62802c1ae8", "PartNumber":4 }] }
-
将文件命名为 fileparts.json。
-
运行以下命令完成分段上传。
aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk
将 --multipart-upload 的值替换为您创建的具有 ETag 的 JSON 格式文件的路径。 如果前面的命令成功,则您会收到类似于以下内容的响应:
{ "ETag": "\\"exampleae01633ff0af167d925cad279-2\\"", "Bucket": "DOC-EXAMPLE-BUCKET", "Location": "https://DOC-EXAMPLE-BUCKET.s3.amazonaws.com/large_test_file", "Key": "large_test_file" }
解决上传失败问题
如果您使用高级别 aws s3 命令进行分段上传并且上传失败,则必须重新开始分段上传。分段上传失败是由于超时或手动取消造成的。在大多数情况下,AWS CLI 会自动取消分段上传,然后删除您创建的任何分段文件。此过程可能需要几分钟。如果您使用 aws s3api 命令并且进程被中断,请删除不完整的上传分段,然后重新上传这些分段。
要删除不完整的分段,请使用 AbortIncompleteMultipartUpload 生命周期操作。或者,使用 aws s3api 命令删除不完整的分段:
-
运行以下命令列出不完整的分段文件上传。
aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET
将 --bucket 的值替换为您的桶的名称。
-
该命令会返回一条类似于以下内容的消息,其中包含所有未处理的文件分段:
{ "Uploads": [ { "Initiator": { "DisplayName": "multipartmessage", "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " }, "Initiated": "2016-03-31T06:13:15.000Z", "UploadId": "examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB_A-", "StorageClass": "STANDARD", "Key": "", "Owner": { "DisplayName": "multipartmessage", "ID": "290xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx " } } ] }
-
运行以下命令删除不完整的分段:
aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB
相关信息
相关内容
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前