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

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

我在 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'
有帮助吗?

解决方案

我怀疑你真的可以通过从Rails的一个CGI风格上传到PARAM和RESTClient实现期望它的工作。

在Rails定时上传将具有不以发布资源(如原来的文件名等)都属于相当长的一段额外的属性,以及一个Rails上传包含IO与实际文件数据。此外,在滑轨文件上传对象可能是将它视为手柄和可能是一个StringIO的 - 取决于载的大小

什么你有效地需要做的是“改头换面”上传的RESTClient实现妥善处理它,并重新包装和倒带将它视为对象传递给RESTClient实现。也许你可以逃脱只是挑选上传对象本身,而不是整个PARAMS [:文件]

其他提示

确认您的RESTClient实现动作可以在本地先保存。如果操作不能在本地保存,那么你将有一个更好的主意,其中,同时故障排除一下。

看起来问题出在休息客户端的文件发布上,请查看另一种发布方法,例如路边。

关于此问题发布多部分表单数据的许多示例: 红宝石:如何通过 HTTP 将文件作为 multipart/form-data 发布?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top