Tôi đang cố gắng tải lên tệp bằng Sinatra. Tôi có mã số here, nhưng tôi nhận được lỗi "phương pháp file_hash không tồn tại" (xem /lib/mvc/helpers/helpers.rb).Tải lên tệp bằng Sinatra
Điều gì đang xảy ra ở đây? Có một số phụ thuộc tôi đang thiếu.
Tôi đang cố gắng tải lên tệp bằng Sinatra. Tôi có mã số here, nhưng tôi nhận được lỗi "phương pháp file_hash không tồn tại" (xem /lib/mvc/helpers/helpers.rb).Tải lên tệp bằng Sinatra
Điều gì đang xảy ra ở đây? Có một số phụ thuộc tôi đang thiếu.
Tôi đã may mắn với mã ví dụ được tìm thấy trên this thread.
Bao gồm nó ở đây trong trường hợp liên kết bao giờ biến mất:
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
Sau đó xem bạn sẽ trông như thế này. Này sử dụng HAML, nhưng phần quan trọng không phải là để quên đặt enctype trong yếu tố hình thức của bạn, nếu không bạn sẽ chỉ nhận được tên tập tin thay vì một đối tượng:
%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>
tôi thấy, hơi thay đổi và sử dụng này:
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
Bản gốc ở số https://github.com/tbuehlmann/sinatra-fileupload nhưng có một số vấn đề về cấu hình trong môi trường của tôi. Đừng quên sử dụng enctype="multipart/form-data"
và method='POST'
ở biểu mẫu tải lên.
Trong trường hợp của tôi, tôi thấy rằng khóa băm đầu tiên là một chuỗi - không phải là một biểu tượng - ví dụ. 'params ['file']' –
Tôi giả sử bạn đang cố sử dụng kẹp giấy với điều này. Bạn có thể dán lại mã của mình không (liên kết dẫn đến trang đã chết)? Nếu không, giải pháp của bạn là gì? – slant