gpt4 book ai didi

amazon-web-services - 直接从 url 上传文件到 S3 Bucket

转载 作者:太空狗 更新时间:2023-10-29 23:06:53 24 4
gpt4 key购买 nike

我们需要将视频文件存储移动到 AWS S3。旧位置是一个 cdn,所以我只有每个文件的 url(1000 多个文件,> 1TB 的总文件大小)。不能直接在存储服务器上运行上传工具。

我已经创建了一个工具来下载文件、将文件上传到 S3 存储桶并使用新的 HTTP url 更新数据库记录,并且工作完美,只是需要很长时间。

下载文件需要一些时间(考虑到每个文件接近 1 GB)并且上传需要更长的时间。

是否可以将视频文件直接从cdn上传到S3,这样我就可以将处理时间减半?类似于读取文件 block ,然后在读取下一个 block 时将其放入 S3。

目前我使用 System.Net.WebClient 下载文件并使用 AWSSDK 上传。

PS:我的网速没有问题,我在具有 1GBit 网络连接的服务器上运行该应用程序。

最佳答案

不,没有办法指示 S3 代表您从非 S3 URL 获取资源并将其保存在存储桶中。

S3 唯一支持的类似“fetch”的操作是 PUT/COPY 操作,其中 S3 支持从一个桶中取出一个对象并将其存储在另一个桶(或同一个桶)中,甚至跨区域,甚至跨账户,只要因为您有一个用户对交易两端的必要操作有足够的权限。在这种情况下,S3 在内部处理所有数据传输。

否则,获取远程对象并将其存储在 S3 中的唯一方法是下载资源,然后将其上传到 S3——但是,没有什么可以阻止您同时执行这两项操作。

要做到这一点,您需要编写一些代码,可能使用异步 I/O 或线程,以便您可以同时接收下载数据流并使用 S3 的 Multipart Upload 以对称 block 的形式上传数据能力,它允许您编写单独的 block (每个 block 至少 5MB),根据最终请求,S3 将验证并合并到一个最大 5TB 的对象中。分段上传支持 block 的并行上传,并允许您的代码在不重新启动整个作业的情况下重试任何失败的 block ,因为 S3 不必按线性顺序上传或接收各个 block 。

如果来源支持 HTTP range requests ,您甚至不一定需要接收“流”,您可以发现对象的大小,然后按范围GET 分块并分段上传它们。使用并行处理多个范围的线程或异步 I/O 执行此操作,您可能能够复制整个对象更快而不是在单个整体下载中下载它,具体取决于因素限制您的下载速度。

我使用这种技术从 AWS 外部将数 GB 的文件上传到 S3 时,总速度达到了 45 到 75 Mbits/秒。

关于amazon-web-services - 直接从 url 上传文件到 S3 Bucket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28458590/

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