Sinatra上传多个文件

时间:2013-09-17 22:02:17

标签: ruby file-upload sinatra

我正在编写一个简单的Sinatra应用程序但遇到问题<input type="file" multiple />在阅读文件时没有让Rack抛出NoMethodError: undefined method 'bytesize' for (Hash)

表格的写法如下:

<form action="/upload" enctype="multipart/form-data" method="post">
    <input type="file" name="images[]" multiple />
</form>

但接收端抛出上述错误,在我的任何代码执行之前,也就是说,Rack没有正确解析input[name=images]。我发送的表格不正确吗?如果我放下括号[],那么只发送最后一个文件(很多),但我觉得我可能会遗漏一些东西......

只是为了澄清:这是Sinatra v1.4.3和Rack v1.5.2,后者是抛出异常的那个。完全回溯here

1 个答案:

答案 0 :(得分:6)

唯一让我失望的是你不使用POST方法 - 也许你的问题与此有关。无论如何,以下代码对我来说非常适合。我希望这会给你一个如何修复代码的提示。

require 'sinatra'

get '/' do
  <<-HTML
  <html>
  <head><title>Multi file upload</title></head>
  <body>
    <form action="/upload" method="post" enctype="multipart/form-data">
      <input type="file" name="images[]" multiple />
      <input type="submit" />
    </form>
  </body>
  </html>
  HTML
end

post '/upload' do
  content_type :text

  res = "I received the following files:\n"
  res << params['images'].map{|f| f[:filename] }.join("\n")
  res
end