【问题标题】:Using restclient with multipart posts将 restclient 与多部分帖子一起使用
【发布时间】:2009-08-12 18:23:36
【问题描述】:

我正在使用 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'

【问题讨论】:

  • 你能说说你是怎么解决这个问题的吗?

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


【解决方案1】:

我怀疑你真的可以将 CGI 样式的上传参数从 Rails 传递到 restclient 并期望它工作。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      在这个问题上发布多部分表单数据的很多例子:Ruby: How to post a file via HTTP as multipart/form-data?

      【讨论】:

        猜你喜欢
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-05
        • 2015-10-25
        相关资源
        最近更新 更多