from:https://gist.github.com/1132028
有修改
require 'rubygems'
require 'sinatra'
require 'fileutils'
# upload with:
# curl -v -F "data=@./filename" http://localhost:4567/user/filename
# or just go to http://localhost:4567/user/filename with a browser
get '/:name/:filename' do
erb :form
end
post '/:name/:filename' do
userdir = File.join("files", params[:name])
FileUtils.mkdir_p(userdir)
filename = File.join(userdir, params[:filename])
#raw = request.env["rack.input"].read
#raw = request.body.read
data = params[:data]
if data.nil?
data = request.env["rack.request.form_hash"]["file"]
end
File.copy_stream(data[:tempfile], filename)
=begin
File.open(filename, 'wb') do |file|
file.write(data[:tempfile].read)
end
=end
"wrote to #{filename}\n"
end
enable :inline_templates
__END__
@@ form
<form action="" method="post" enctype="multipart/form-data">
<p>
<label for="file">File:</label>
<input type="file" name="file">
</p>
<p>
<input name="commit" type="submit" value="Upload" />
</p>
</form>
测试:
1.在浏览器:
http://192.168.1.155:4567/andy/ak.jpg
2.在cUrl (在d:\temp下面有一个a.jpg的文件)
$d:
$cd temp
$curl -v -F "data=@./a.jpg" http://192.168.1.155:4567/andy/ak.jpg
执行成功后,在服务器C:\sinatra_work\files\andy下面有ak.jpg文件
a
a
a