如何使用curl从一台服务器向另一台服务器传输文件(有限的服务器资源)

Joe*_*Joe 6 linux curl amazon-s3

我的API服务器具有非常有限的磁盘空间(500MB)和内存(1GB).它获得的API调用之一是接收文件.消费者调用API并传递要下载的URL.

我的服务器的"目标"是将此文件上传到Amazon S3.不幸的是,我不能要求消费者将文件直接上传到S3(部分要求).

问题是,有时这些是巨大的文件(10GB)并将它们保存到磁盘然后上传到S3不是一个选项(500MB磁盘空间限制).

我的问题是,如何使用curl Linux程序将文件从输入URL"管道"到S3?

注意:我能够以不同的方式管道它,但是,它首先尝试下载整个文件并失败,或者我遇到内存错误和卷曲退出.我的猜测是下载比上传要快得多,因此当我获得10GB文件时,管道缓冲区/内存会增长并爆炸(服务器上的内存为1GB).

有没有办法实现我正在尝试使用卷曲和滚边?

谢谢你,杰克

小智 1

另一位 SO 用户提出了关于来自 stdin 的curl 帖子的类似问题。请参阅使用管道获取卷曲数据

一旦您能够从第一个curl进程的标准输出的输出中发布您的上传流,如果由于下载速度比上传速度快而导致内存不足,请查看mbuffer实用程序。我自己没有使用过它,但它似乎就是为了解决这类问题而设计的。

最后,如果所有其他方法都失败,我想您可以使用curl的--limit-rate选项将上传和下载的传输速率锁定到一些相同且可持续的值。这可能未充分利用带宽,并且无法很好地扩展多个并行下载/上传流,但对于某些一次性批处理过程来说,它可能已经足够好了。