2013-02-24 99 views
39

亚马逊S3支持批量上传吗? 我有一份工作需要每晚上传~100K的文件,可以达到1G,但对小文件强烈倾斜(90%小于100字节,99%小于1000字节长)。是否有可能执行批量上传到亚马逊s3?

s3 API是否支持在单个HTTP调用中上传多个对象?

所有对象必须在S3中作为单独的对象可用。我无法在其他任何地方(FTP等)或其他格式(数据库,EC2本地驱动器等)托管它们。这是我无法改变的外部要求。

+2

很大的问题!只是出于好奇心,你能告诉我们为什么,你想做什么,这些文件是什么? – 2013-02-24 08:54:51

+0

我可以问这些问题吗? – 2013-02-24 09:06:20

+0

我想知道为什么会出现这样的要求。如果您需要一次替换所有文件,也许有一些方法可以将它们以常规方式上传到临时存储区,然后更改存储区名称? – 2013-02-24 09:17:06

回答

23

s3 API是否支持在单个HTTP调用中上传多个对象?

不,the S3 PUT operation只支持每个HTTP请求上传一个对象。

你可以安装你的机器上S3 Tools要与远程斗同步,并运行以下命令:

s3cmd sync localdirectory s3://bucket/ 

然后,你可以在脚本中把这个命令,并创建计划作业运行这个命令每晚。

这应该做你想做的。

该工具基于MD5散列和文件大小执行文件同步,因此碰撞应该很少(如果您真的希望只需使用“s3cmd put”命令来强制盲目覆盖目标存储桶中的对象)。

编辑:另外,还要确保你读我联系了S3工具网站上的文档 - 有需要的您是否想在本地删除的文件,以从桶中或者被删除或忽略等

+7

这种方法仍然使用个人放置操作,并且本质上不比其他任何操作更快。答案已被接受,但看起来你所做的一切都是指向一种工具,他可以在代码中做同样的事情。 – bridiver 2015-07-13 02:52:56

+0

你可以做从节点API同步也 - 查看节点S3的客户端 – 2017-04-21 00:34:38

+0

s3cmd需要继续使用 – Adder 2017-10-06 14:10:49

28

不同的标志,您可以使用sync命令通过AWS CLI tool上传S3。

AWS S3同步local_folder S3://桶名称

可以非常快用这个方法来批量上传文件到S3。

+6

与以前的答案许可证,寓意这里似乎是,这些工具在某种程度上做的事情不能否则可以使用API​​来完成,我不认为是这样的话 – bridiver 2015-07-13 02:53:59

+0

我目前使用AWS CLI工具的本地目录和S3存储之间同步。我想知道是否有可用于输出“上传”或同步的结果到本地TXT文件,我可以通过电子邮件发送,然后通过blat.exe有人争论或参数。 所有这一切都将被放入一个批处理文件十万要由我们的其他服务器上下载文件的预定同步。 (使用S3存储桶作为云源以克服源服务器的上传速度问题) – 2016-01-29 01:39:15

0

一个文件(或文件的一部分)=一个HTTP请求,但Java API现在支持高效的多文件上传,而无需编写多线程你自己,通过使用TransferManager