Ruby on rails 将restclient与多部分POST一起使用

Ruby on rails 将restclient与多部分POST一起使用,ruby-on-rails,ruby,rest-client,Ruby On Rails,Ruby,Rest Client,我使用restclient作为多部分表单,将数据发送到restful web服务(它是Panda视频编码服务)。 不过,诀窍在于,我传递到restclient(Technoweenie分支)的文件来自用户提交的我自己的表单 那么,让我们来看看这个。用户将文件发布到我的rails应用程序。在我的控制器中,它从params[:file]接收文件。然后我想使用RestClient将params[:file]传递给Panda 我得到的错误是在Panda服务器上。我注意到堆栈跟踪中的文件param也是一个

我使用restclient作为多部分表单,将数据发送到restful web服务(它是Panda视频编码服务)。 不过,诀窍在于,我传递到restclient(Technoweenie分支)的文件来自用户提交的我自己的表单

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

我得到的错误是在Panda服务器上。我注意到堆栈跟踪中的文件param也是一个字符串(我假设Panda正在转换为一个字符串以获得更好的堆栈跟踪)

~已开始请求处理:2009年8月12日星期三18:05:15+0000
~Params:{“format”=>“html”、“multipart”=>“true”、“account\u key”=>“SECURE\u key”、“action”=>“upload”、“id”=>“SECURE\u id”、“controller”=>“videos”、“file”=>“}
~9bfb1750-6998-012c-4509-12313900b0f6:(500返回到客户端)InternalServerError无法将nil转换为字符串
/var/local/www/panda/app/models/video.rb:246:in'extname'
/var/local/www/panda/app/models/video.rb:246:in“初始处理”
/var/local/www/panda/app/controllers/videos.rb:79:在“上传”中

看来问题出在rest客户端的文件发布上,请查看一种类似于URB的发布方法


在这个问题上发布多部分表单数据的许多示例:

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

我怀疑您是否真的能够将一个CGI风格的上传参数从Rails传递到restclient,并期望它能够正常工作

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


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

你能说说你是如何解决这个问题的吗?
 ~ 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'