Ruby中的缓冲多部分表单帖子

时间:2008-10-17 19:53:24

标签: ruby http forms networking multipartform-data

我目前在Ruby脚本中使用Net::HTTP通过多部分表单帖子将文件发布到网站。它适用于小文件,但我经常使用此脚本发送非常大的文件,HTTP#post似乎只接受作为String对象的帖子数据,这意味着我发送的文件必须先读入内存才能发送任何内容。这个脚本在繁忙的生产服务器上运行,因此只是为了发送文件而吞噬数百兆字节的RAM是不可接受的。

理想情况下,有一个方法可以给出缓冲区大小和IO对象,并且会发送缓冲区大小的数据块,仅在需要时从IO对象读取。实现这一目标的最佳方法是什么?我错过了Net::HTTP中的相关内容吗?

更新Net::HTTP#body_stream(input)看起来不错,但文档相当......稀疏。有人能够指出我在行动中的一个很好的例子吗?

2 个答案:

答案 0 :(得分:3)

实际上我设法使用body_stream上传文件。完整的源代码在这里: http://stanislavvitvitskiy.blogspot.com/2008/12/multipart-post-in-ruby.html

答案 1 :(得分:0)

使用Net :: HTTP#body_stream(输入)

multipart post without streaming的示例: