从远程URL下载文件的Copy_Stream

8yoxcaq7  于 2022-10-15  发布在  Ruby
关注(0)|答案(2)|浏览(181)

我们希望将文件从远程URL下载到内存,然后将其上传到某个公共云。我计划在Ruby中使用Copy_Stream lib。然而,我不确定这是否可以实现,因为我还需要以不会影响性能的方式维护内存和CPU统计数据。
有什么建议或例子如何通过Ruby中的Copy_Stream lib来实现这一点吗?考虑到性能,我们有没有其他库来实现这一点?
https://ruby-doc.org/core-2.5.5/IO.html

3ks5zfa0

3ks5zfa01#

您可以将src/dst设置为响应读/写的简单IO抽象:

src = IO.popen(["ssh", srchost, "cat /path/to/source_file | gzip"], "r")
dst = IO.popen(["ssh", dsthost, "gunzip > /path/to/dest_file"], "w")

IO.copy_stream(src, dst)

src.close
dst.close
lx0bsm1f

lx0bsm1f2#

  • 将src设置为可下载文件。
  • 设置DST为云资源,有写权限。
  • 确保两者符合sendfile()

发送文件是一个基于内核的复制流过程。就内存使用和性能而言,没有比这更快的了。您的申请将不会参与转移。
对于sendfile(),输出套接字必须支持零复制,并且输入文件必须支持mmap()。通常,这意味着您已经将文件下载到本地文件,在复制过程中不更改下载的文件,并且您对输出具有打开的套接字。

相关问题