如何使用 AWS CLI 将文件分段上传到 Amazon S3?

上次更新时间:2020 年 11 月 10 日

我想将一个大文件作为多个部分或使用分段上传复制到 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 s3 命令不支持所需的请求参数时,才应使用 aws s3api命令(例如 awss3api create-multipart-upload)。

注意:如果在运行 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 的对象具有与使用传统 PUT 请求上传的对象不同的 ETag 格式。要存储源文件的 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 CLI 与 Amazon S3 结合使用的更多信息,请参阅 AWS CLI S3 配置。

使用低级别 (aws s3api) 命令分段上传文件

重要提示:只有在 aws s3 命令不支持特定上传需求(例如,当分段上传涉及多个服务器时,手动停止分段上传并恢复)或者 aws s3 命令不支持所需的请求参数时,才使用此 aws s3api 过程。对于其他分段上传,请使用 aws s3 cp 或其他高级别 s3 命令。

1.    将要上传的文件拆分为多个部分。

提示:如果您使用的是 Linux 操作系统,则使用 split 命令。

2.    运行此命令以启动分段上传并检索关联的上传 ID。该命令会返回一个包含 UploadID 的响应:

aws s3api create-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file

3.    复制 UploadID 值作为后续步骤的参考信息。

4.    运行此命令以上传文件的第一部分。请务必使用适合您的存储桶、文件和分段上传的值来替换所有值。该命令会返回一个响应,其中包含您上传的文件部分的 ETag 值。有关每个参数的更多信息,请参阅 upload-part。

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==

5.    复制 ETag值,以便在后面的步骤中用作参考。

6.    对文件的每个部分重复步骤 4 和 5。对于您上传的每个新部分,请务必递增部分编号。

7.    上传所有文件部分后,运行以下命令列出上传的部分并确认列表已完成:

aws s3api list-parts --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

8.    将上传的每个文件部分的 ETag值编译为类似于以下内容的 JSON 格式文件:

{

"Parts": [{

"ETag": "example8be9a0268ebfb8b115d4c1fd3",

"PartNumber":1

},

....

{

"ETag": "example246e31ab807da6f62802c1ae8",

"PartNumber":4

}]

}

9.    将文件命名为 fileparts.json。

10.    运行此命令来完成分段上传。将 --multipart-upload 的值替换为包含您创建的 ETag 的 JSON 格式文件的路径。

aws s3api complete-multipart-upload --multipart-upload file://fileparts.json --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id exampleTUVGeKAk3Ob7qMynRKqe3ROcavPRwg92eA6JPD4ybIGRxJx9R0VbgkrnOVphZFK59KCYJAO1PXlrBSW7vcH7ANHZwTTf0ovqe6XPYHwsSp7eTRnXB1qjx40Tk

11.    如果上一个命令成功,则会收到类似于下面的响应:

{

"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 命令删除未完成部分:

1.    运行此命令列出未完成的分段文件上传。将--bucket值替换为您的存储桶的名称。

aws s3api list-multipart-uploads --bucket DOC-EXAMPLE-BUCKET

2.    该命令会返回一条消息,其中包含未处理的任何文件部分,类似于以下内容:

{

"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 "

}

}

]

}

3.    运行此命令删除未完成的部分:

aws s3api abort-multipart-upload --bucket DOC-EXAMPLE-BUCKET --key large_test_file --upload-id examplevQpHp7eHc_J5s9U.kzM3GAHeOJh1P8wVTmRqEVojwiwu3wPX6fWYzADNtOHklJI6W6Q9NJUYgjePKCVpbl_rDP6mGIr2AQJNKB

这篇文章对您有帮助吗?

您是否需要账单或技术支持?

aws cli 上传文件到s3命令_使用 AWS CLI 分段上传到 Amazon S3相关推荐

  1. 多人上传文件公共网盘_解决百度网盘上传提示“上传文件数量超过500个限制”的方法...

    不知道大家有没有使用过百度网盘这款软件,在这款软件中我们可以免费获取很多的存储空间.小编经常会使用这款软件来保存电影等资源,因此每一个电影都会使用一个文件夹进行保存.最近突然发现在百度网盘中只能上传5 ...

  2. linux上传文件命令ftp put,Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...

    介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo.以下为使用该连接做的实验. 查看远程ftp服务器上用户pe ...

  3. linux get与put,科技常识:Linux ftp 命令行中下载文件get与上传文件put的命令应用详解...

    今天小编跟大家讲解下有关Linux ftp 命令行中下载文件get与上传文件put的命令应用详解 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关Linux ftp 命令行中下载文件get与 ...

  4. 上传文件到服务器的命令,ftp上传文件到服务器命令

    ftp上传文件到服务器命令 内容精选 换一换 本文介绍如何在 Linux 系统的本地机器上使用 FTP 服务,将文件从本地上传到云服务器中.已在待上传文件的云服务器中搭建 FTP 服务.如果您的云服务 ...

  5. js并发上传文件到不同服务器,simple-uploader.js 功能强大的上传组件 - 文章教程

    simple-uploader.js(也称 Uploader)是一个上传库,支持多并发上传,文件夹.拖拽.可暂停继续.秒传.分块上传.出错自动重传.手工重传.进度.剩余时间.上传速度等特性:该上传库依 ...

  6. 关于前端上传文件到后台,文件大小超出限制,导致上传失败的解决办法。

    文章出处:Jiangkuobo,微信:jkb_267460 文章目录 前言 一.使用elementPlus上传图片,出现的问题. 二.验证猜想 1.验证方式: 2.测试结果: 3.我的猜想与验证 三. ...

  7. fileitem方法_FileItem类的getContentType ()方法,用于获得上传文件的类型。_学小易找答案...

    [判断题]我们经常调用createItem()方法将请求消息实体创建成FileItem实例对象. [单选题]下面用于判断FileItem类对象封装的数据是否为普通文本表单字段的方法是() [单选题]关 ...

  8. ssis 循环导入数据_使用集成服务(SSIS)包从Amazon S3 SSIS存储桶导入数据

    ssis 循环导入数据 This article explores data import in SQL Server from a CSV file stored in the Amazon S3 ...

  9. linux 安装上传文件,linux常用命令(二)文件上传下载及软件安装

    1.上传下载工具安装 (1)WINDOWS 到linux的文件上传及下载: windows下打开secureCRT,通过SSH连到⾄至远程linux主机: 上传下载工具安装命令:yum -y inst ...

最新文章

  1. 登录linux后台工具,linux后台进程管理工具-supervisor
  2. SQL2000中默认sa帐号改名和删除的最安全方法
  3. opencv中的Rodrigues()函数
  4. php e all e notic,error_reporting(E_ALL ^ E_NOTICE)详细说明 | 慢生活的记忆
  5. linux基础—课堂随笔_03 SHELL脚本编程基础
  6. fanuc机器人控制柜接线_FANUC涂胶标定参考
  7. poj 1269 直线相交情况
  8. [摘记]数值方法12——常微分方程组的积分
  9. 【源码】HashMap源码及线程非安全分析
  10. 转:Ajax与CustomErrors的尴尬
  11. 锚点盒子随滚动条浮动
  12. 【语音处理】基于matlab低通滤波器语音信号加噪与去噪【含Matlab源码 1709期】
  13. android长截图工具下载,长截图拼接app下载
  14. 【转•科普】为什么Nikola Tesla是迄今为止最伟大的极客(爱迪生啊爱迪生)
  15. Python: PS 图像调整--饱和度调整
  16. B站小甲鱼python学习笔记
  17. POJ 2387 Til the Cows Come Home (最短路径 模版题 三种解法)
  18. Canvas绘制一个时钟
  19. java 伽玛函数_Gamma函数(伽玛函数)的一阶导数、二阶导数公式推导及java程序
  20. 蓝牙电话协议HFP(Hands-Free Profile) 传输手机状态信息(信号/漫游/电量/运行商/电话状态)

热门文章

  1. 服务器导出word文档中有乱码,使用Aspose.word DOC转PDF文件乱码问题-Doc文件
  2. 原生Ajax五个基本步骤(面试题)
  3. ORACLE表有逻辑坏块时EXPDP导出报错排查
  4. 我的世界服务器整人系列,我的世界:整人还在用TNT?老玩家用这7个道具简直谁见谁怕!...
  5. ios系统登录连接服务器失败,iPhone 上登陆 Apple ID 提示连接到服务器时出现问题及 iOS 13 教程...
  6. 勒索软件致重要文件化为乌有?不重视备份将后悔莫及!
  7. 研发部的人员素质要求及自我培养
  8. 数据库课程设计-职工工资管理系统
  9. MyBatis-plus 查询 模糊查询的使用
  10. 使用vue+vant搭建商城