Загрузка файла с помощью Sinatra - PullRequest
16 голосов
/ 21 апреля 2010

Я пытаюсь загружать файлы с помощью Sinatra.У меня есть код здесь , но я получаю ошибку "метод file_hash не существует" (см. /Lib/mvc/helpers/helpers.rb).

Что происходитВот?Есть ли какая-то зависимость, по которой я скучаю.

Ответы [ 3 ]

28 голосов
/ 27 февраля 2011

Мне повезло с примером кода, найденным в этой теме .

Включение здесь, если ссылка исчезнет:

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"}
21 голосов
/ 01 августа 2012
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>
4 голосов
/ 17 декабря 2012

Я нашел, немного изменил и использовал это:

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" в форму загрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...