gpt4 book ai didi

amazon-web-services - 在 AWS S3 上合并文件(使用 Apache Camel)

转载 作者:行者123 更新时间:2023-12-03 21:06:27 24 4
gpt4 key购买 nike

我有一些文件正在上传到 S3 并为一些 Redshift 任务进行处理。该任务完成后,需要合并这些文件。目前我正在删除这些文件并再次上传合并的文件。
这些占用了大量带宽。有什么办法可以直接在 S3 上合并文件?

我正在使用 Apache Camel 进行路由。

最佳答案

S3 允许您使用 S3 文件 URI 作为复制操作的源。结合 S3 的 Multi-Part Upload API,您可以提供多个 S3 对象 URI as the sources keys用于多部分上传。

然而,魔鬼在细节中。 S3 的分段上传 API 的最小文件分段大小为 5MB。因此,如果串联文件系列中的任何文件小于 5MB,它将失败。

但是,您可以通过利用允许最终上传片段小于 5MB 的漏洞来解决此问题(这是允许的,因为在上传剩余片段时会在现实世界中发生这种情况)。

我的生产代码通过以下方式执行此操作:

  • 查询要上传的文件 list
  • 如果第一部分是
    低于 5MB,下载片段*并缓冲到磁盘,直到缓冲 5MB。
  • 依次追加部分直到文件连接完成
  • 如果非终止文件小于 5MB,则附加它,然后完成上传并创建新的上传并继续。

  • 最后,S3 API 中存在一个错误。 ETag(实际上是 S3 上的任何 MD5 文件校验和,在完成分段上传时未正确重新计算。要解决此问题,请在完成时复制罚款。如果您在连接期间使用临时位置,这将得到解决在最后的复制操作上。
    *请注意,您可以下载 byte range of a file .这样,如果第 1 部分是 10K,第 2 部分是 5GB,则只需读取 5110K 即可满足继续所需的 5MB 大小。
    **您还可以在 S3 上有一个 5MB 的零块,并将其用作您的默认起始块。然后,当上传完成时,使用 5MB+1 to EOF-1 的字节范围进行文件复制。

    附言当我有时间制作此代码的要点时,我会在此处发布链接。

    关于amazon-web-services - 在 AWS S3 上合并文件(使用 Apache Camel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19290103/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com