我将restclient用于多部分表单,以将数据发送到一个 Restful Web服务(它是Panda视频编码服务)。
但是,诀窍在于,我传递给restclient(Technoweenie分支)的文件来自用户提交的我自己的表单。
因此,让我们逐步了解一下。用户将文件发布到我的Rails应用程序。在我的 Controller 中,它从params [:file]接收文件。然后,我想使用RestClient将params [:file]传递给Panda。
我得到的错误是在 Pandas 服务器上。我注意到堆栈跟踪中的文件参数也位于字符串中(我认为是Panda变成了一个更好的堆栈跟踪字符串)。
~ Started request handling: Wed Aug 12 18:05:15 +0000 2009
~ Params: {"format"=>"html", "multipart"=>"true", "account_key"=>"SECURE_KEY", "action"=>"upload", "id"=>"SECURE_ID", "controller"=>"videos", "file"=>"#<File:0xcf02ca4>"}
~ 9bfb1750-6998-012c-4509-12313900b0f6: (500 returned to client) InternalServerErrorcan't convert nil into String
/var/local/www/panda/app/models/video.rb:246:in `extname'
/var/local/www/panda/app/models/video.rb:246:in `initial_processing'
/var/local/www/panda/app/controllers/videos.rb:79:in `upload'
最佳答案
我怀疑您是否真的可以将来自Rails的CGI风格的上传参数传递给restclient并期望它能正常工作。
在Rails中进行常规上载会具有很多不属于发布资源的额外属性(例如原始文件名等),并且Rails上载包含具有实际文件数据的IO。此外,Rails中的文件上传对象可能是Tempfile句柄,并且可能是StringIO-取决于上传的大小。
您实际上需要做的是“重新打包”您的上载文件以供rest-client正确处理,然后将重新打包并倒带的Tempfile对象传递给restclient。也许您可以只选择上传对象本身而不是整个params [:file]
关于ruby-on-rails - 在多篇文章中使用restclient,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1267858/