2013-09-17 3 views
1

Я пишу простое приложение Sinatra, но имеющее проблемы с <input type="file" multiple />, не делая Rack throw NoMethodError: undefined method 'bytesize' for (Hash) при чтении файлов.Несколько загрузок файлов в Sinatra

форма записывается так:

<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

Ошибка в коде Ruby. Вам нужно будет опубликовать источник действия и любой другой соответствующий код. –

+0

Да, это специально для Rack's [utils.rb] (https://github.com/rack/rack/blob/master/lib/rack/utils.rb#L333), как я уже сказал, это не дойти до моего кода. Я надеялся, что это поле типа массива. – Roberto

+1

Нет кода? Кроме того, это не выглядит как * full * backtrace. Где исключение? –

ответ

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 
+0

Спасибо за ответ, Патрик! Я просто скопировал и вставил неправильно, я обновлю вопрос, чтобы отразить это. Просто из любопытства, какие версии Rack/Sinatra вы используете? – Roberto

+1

Добро пожаловать! Я использовал Rack 1.5.2 и Sinatra 1.4.3 на MRI 2.0.0p195 для проверки кода. –

+0

Я только что попробовал его с MRI 1.9.3-p429, и это тоже работает. –

Смежные вопросы