我一直在四处寻找,似乎找不到一个好的解决方案。我的 Rails 应用程序将其文件存储在 Amazon S3 中。我现在需要将它们发送到远程(第三方)服务。
我正在使用 RestClient 发布到第三方服务器,如下所示:
send_file = RestClient::Request.execute(
:method => :post,
:url => "http://remote-server-url.com",
:payload => File.new("some_local_file.avi", 'rb'),
:multipart => true,
etc.... )
它适用于本地文件,但如何将远程文件从 S3 直接发送到此第 3 方服务?
我在这里找到了一个答案,有人使用 open-uri:ruby 使用 open-URI 从 S3 读取文件
我自己测试了一下,效果很好。
:payload => open(URI.parse("http://amazon-s3-example.com/some_file.avi"))
但是,我在这里读到一条评论,说 open-uri 只是将远程文件加载到内存中。请参阅此答案的最后评论:https://stackoverflow.com/a/264239/2785592
这并不理想,因为我正在处理可能很大的视频文件。我还读过 RestClient 甚至将本地文件加载到内存中的地方;再说一遍,这并不理想。有谁知道这是真的吗?
当然我不可能是唯一一个有这个问题的人。我知道我可以在发送之前在本地下载 S3 文件,但我希望节省时间和带宽。另外,如果 RestClient 真的does即使将本地文件加载到内存中,比在本地下载它也不会为我节省任何东西。呵呵。
任何建议将不胜感激。谢谢 :)
Update:远程服务器只是一个响应post请求的API。我没有能力改变他们的任何事情。