upload file by Sinatra

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值