Sum*_*ava 14 amazon-s3 amazon-web-services
我有一些文件正在上传到S3并处理一些Redshift任务.完成该任务后,需要合并这些文件.目前我正在删除这些文件并再次上传合并文件.这些占用了大量带宽.有没有办法直接在S3上合并文件?
我正在使用Apache Camel进行路由.
Jos*_*ust 26
S3允许您使用S3文件URI作为复制操作的源.结合S3的多部件上传API,您可以提供多个S3对象URI 作为多部分上载的源键.
然而,魔鬼在细节中.S3的多部分上传API的最小文件部分大小为5MB.因此,如果连接下的一系列文件中的任何文件小于5MB,则它将失败.
但是,你可以通过利用循环漏洞来解决这个问题,这个循环漏洞允许最终上传部分<5MB(允许因为这在现实世界中发生,当上传剩余部分时).
我的生产代码是这样做的:
最后,S3 API中存在一个错误.ETag(实际上是S3上的任何MD5文件校验和,在多部分上传完成时未正确重新计算.要解决此问题,请在完成时复制罚款.如果在连接期间使用临时位置,则将解决在最后的复制操作上.
*
请注意,您可以下载文件的字节范围.这样,如果第1部分为10K,第2部分为5GB,则只需读入5110K即可满足继续所需的5MB大小.
**
您还可以在S3上使用5MB的零块并将其用作默认的起始块.然后,当上载完成时,使用字节范围执行文件复制5MB+1 to EOF-1
PS当我有时间制作这段代码的要点时,我会在这里发布链接.