使用带有多部分帖子的restclient

时间:2009-08-12 18:23:36

标签: ruby-on-rails ruby rest-client

我正在使用restclient进行多部分表单将数据发送到一个宁静的Web服务(它是Panda视频编码服务)。 但问题是,我传递给restclient(Technoweenie分支)的文件来自我自己提交的用户提交的格式。

所以,让我们来看看吧。用户将文件发布到我的rails应用程序。在我的控制器中,它从params [:file]接收文件。然后我想使用RestClient将params [:file]传递给Panda。

我得到的错误是在熊猫服务器上。我注意到堆栈跟踪中的文件参数也是一个字符串(我假设是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'

3 个答案:

答案 0 :(得分:1)

确认您的restclient操作可以先在本地保存。如果动作无法在本地保存,那么您将在故障排除时更好地了解在哪里查看。

答案 1 :(得分:1)

我怀疑你是否真的可以将Rails中的CGI样式上传参数传递给restclient并期望它能够正常工作。

Rails中的常规上传会有一些额外的属性,这些属性不属于已发布的资源(如原始文件名等),Rails上载包含带有实际文件数据的IO。 Rails中的文件上传对象也可能是Tempfile句柄,可能是StringIO - 取决于上传的大小。

您实际需要做的是“重新打包”上传的rest-client以正确处理它,并将重新打包和重绕的Tempfile对象传递给restclient。也许你只需选择上传对象而不是整个参数[:file]

就可以逃脱

答案 2 :(得分:0)

看起来问题出在rest-client发布文件的问题上,请查看另一种发布方式的方法。

在此问题上发布多部分表单数据的大量示例:Ruby: How to post a file via HTTP as multipart/form-data?