是否Amazon S3的支持批量上传? 我有一个需要上传的工作,每天晚上〜100K文件可以达到1G,但对小文件的强烈扭曲(90%小于100个字节,99%小于1000个字节长)的。
是否S3 API的支持在单个HTTP调用上传多个对象?
所有对象必须在S3可作为单独的对象。 我不能承载他们在其他地方(FTP等),或者以另一种格式(数据库,EC2本地驱动器等)。 这是我无法改变的外部需求。
是否Amazon S3的支持批量上传? 我有一个需要上传的工作,每天晚上〜100K文件可以达到1G,但对小文件的强烈扭曲(90%小于100个字节,99%小于1000个字节长)的。
是否S3 API的支持在单个HTTP调用上传多个对象?
所有对象必须在S3可作为单独的对象。 我不能承载他们在其他地方(FTP等),或者以另一种格式(数据库,EC2本地驱动器等)。 这是我无法改变的外部需求。
是否S3 API的支持在单个HTTP调用上传多个对象?
否, S3的PUT操作仅支持上传每HTTP请求一个对象。
你可以安装S3工具你的机器上要与远程斗同步,并运行以下命令:
s3cmd sync localdirectory s3://bucket/
然后,你可以在脚本中把这个命令,并创建计划作业每天晚上运行此命令。
这应该做你想要什么。
该工具执行基于了MD5散列,文件大小的文件同步,所以碰撞应该是罕见的(如果你真的想你可以只使用了“s3cmd把”命令来强制对象的盲覆盖在你的目标桶)。
编辑:另外,还要确保你读我联系了S3工具网站上的文档 - 有需要的您是否想在本地删除的文件,以从桶中被删除或忽略等不同的标志
另外,您也可以通过上传S3 AWS CLI工具使用sync命令。
AWS S3同步local_folder S3://斗名
您可以使用此方法来批量上传文件至S3非常快。
一个文件(或文件的一部分)=一个HTTP请求,但Java API现在支持高效的多文件上传,而无需编写多线程你自己,通过使用TransferManager
如果你想使用Java程序来完成它,你可以这样做:
public void uploadFolder(String bucket, String path, boolean includeSubDirectories) {
File dir = new File(path);
MultipleFileUpload upload = transferManager.uploadDirectory(bucket, "", dir, includeSubDirectories);
try {
upload.waitForCompletion();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
s3client和转让管理的创新,如果你想测试如下连接到本地S3:
AWSCredentials credentials = new BasicAWSCredentials(accessKey, token);
s3Client = new AmazonS3Client(credentials); // This is deprecated but you can create using standard beans provided by spring/aws
s3Client.setEndpoint("http://127.0.0.1:9000");//If you wish to connect to local S3 using minio etc...
TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(s3Client).build();
要添加到每个人都在说,如果你希望你的Java代码(而不是CLI)来做到这一点,而不必把所有的文件在一个目录中,你可以创建一个文件列表上传,然后供应该列表中AWS TransferManager的uploadFileList方法。
https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html#uploadFileList-java.lang.String-java.lang.String-java.io。文件java.util.List-