3

我正在编写一个简单的 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,后者是抛出异常的那个。完整的回溯在这里

4

1 回答 1

7

唯一让我失望的是您不使用 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
于 2013-09-20T11:03:34.177 回答