我正在尝试使用Sinatra上传文件。 我有这里的代码(链接),但是我遇到了“方法file_hash不存在”的错误(请参见/lib/mvc/helpers/helpers.rb)。
这里发生了什么? 我是否缺少某些依赖项。
我正在尝试使用Sinatra上传文件。 我有这里的代码(链接),但是我遇到了“方法file_hash不存在”的错误(请参见/lib/mvc/helpers/helpers.rb)。
这里发生了什么? 我是否缺少某些依赖项。
我在这个帖子中找到了一个示例代码,并且使用起来很顺利。
这里也包含它的代码,以防链接失效:
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
enctype="multipart/form-data"
和method="POST"
。params['file']
。 - Ross Attrill