尝试将文件上传到Rails时EOFError(错误的内容正文)

时间:2011-06-24 06:24:26

标签: ruby ruby-on-rails-3 forms file-upload

注意:我已将我的所有控制台输出都包含为pastebin链接,以便让这个问题易于理解......

我正在尝试为我的RoR应用程序创建基本图像文件上传。但每次我提交附有图像的表单(带有单个文件输入的多部分编码表单)时,我会在WEBRick控制台上收到以下错误:

http://pastebin.com/2kRgTaNg

我已经搜索了一段时间,其他几个地方提到了类似的问题,但我发现的唯一处方是由于特定版本的错误而升级机架测试。我似乎无法找到他们引用的版本,我运行gem updatebundle update无济于事。以下是bundle的输出:

http://pastebin.com/7QZtGHaG

我不确定我还能做些什么来升级机架测试 - 我对Rails和Linux环境一般都是新手。

最后一点:虽然我尝试上传了几个不同大小的不同文件,从4KB到300KB,但Firebug中的请求大小总是216B。我不太熟悉多部分文件上传请求的内部工作原理,但我的HTML表单本身可能出现问题吗?

类似问题的链接:

Rails3, Cucumber, Capybara, File upload => bad content body (EOFError)?

http://groups.google.com/group/cukes/browse_thread/thread/5028306893c2c54a

2 个答案:

答案 0 :(得分:4)

使用Sinatra进入此错误 - 结果是文件输入缺少name属性。

答案 1 :(得分:1)

似乎问题不在Rails方面,而在于我的表单。我一直在使用this jQuery插件来尝试自定义样式文件输入控件。它通过将opacity:0;的文件输入控件放在你提供的任何元素上(在我的例子中,我的按钮的div)。

我不确定发生了什么,但请求是从浏览器发出的,具有多部分数据的开放边界,但没有正文或结束边界。换句话说,FireBug简单地显示出站请求有效负载:

....

Request Payload:
------WebKitFormBoundaryzwgDaIoTked9N6CB

Response Headers:
...

而不是:

....

Request Payload:
------WebKitFormBoundaryzwgDaIoTked9N6CB
Content-Disposition: form-data; name="upload"; filename="filename.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryzwgDaIoTked9N6CB--

Response Headers:
...

一旦我放弃了自定义样式并简单地插入正常形式,它一切正常。希望这对可能遇到类似问题的其他人有所帮助!