Я пытаюсь загрузить файлы с помощью Sinatra. У меня есть код здесь, но я получаю ошибку "метод file_hash не существует" (см./Lib/mvc/helpers/helpers. Р.Б.).
Что здесь происходит? Есть ли какая-то зависимость, которой я не хватает.
Я пытаюсь загрузить файлы с помощью Sinatra. У меня есть код здесь, но я получаю ошибку "метод file_hash не существует" (см./Lib/mvc/helpers/helpers. Р.Б.).
Что здесь происходит? Есть ли какая-то зависимость, которой я не хватает.
Мне повезло с кодом примера, найденным на этот поток.
Включая его здесь, если связь когда-либо исчезает:
post '/upload' do
unless params[:file] &&
(tmpfile = params[:file][:tempfile]) &&
(name = params[:file][:filename])
@error = "No file selected"
return haml(:upload)
end
STDERR.puts "Uploading file, original name #{name.inspect}"
while blk = tmpfile.read(65536)
# here you would write it to its final location
STDERR.puts blk.inspect
end
"Upload complete"
end
Тогда ваше представление будет выглядеть так. Это использует HAML, но важной частью является не забыть установить enctype в вашем элементе формы, иначе вы просто получите имя файла вместо объекта:
%form{:action=>"/upload",:method=>"post" ,:enctype=>"multipart/form-data"}
%input{:type=>"file",:name=>"file"}
%input{:type=>"submit",:value=>"Upload"}
include FileUtils::Verbose
get '/upload' do
erb :upload
end
post '/upload' do
tempfile = params[:file][:tempfile]
filename = params[:file][:filename]
cp(tempfile.path, "public/uploads/#{filename}")
'Yeaaup'
end
__END__
@@upload
<form action='/upload' enctype="multipart/form-data" method='POST'>
<input name="file" type="file" />
<input type="submit" value="Upload" />
</form>
Я нашел, немного изменил и использовал это:
if params[:file]
filename = params[:file][:filename]
tempfile = params[:file][:tempfile]
target = "public/files/#{filename}"
File.open(target, 'wb') {|f| f.write tempfile.read }
end
Оригинал находится по адресу https://github.com/tbuehlmann/sinatra-fileupload, но у меня есть некоторые проблемы с конфигурацией в моей среде. Не забудьте добавить enctype="multipart/form-data"
и method="POST"
в форму загрузки.