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 に答える