Ruby
Sinatra
HttpClient

Ruby Sinatraサーバーにhttpclientからファイルアップロードしてみた

すごく簡単に書けたけど、忘れそうなので書いておく。

なおこの記事では、ファイルアップロードの方法を簡潔に記載するため、ディレクトリトラバーサルなどの脅威への対策は一切行っていません。参考にされる方はご注意ください。


server.rb

require 'sinatra'

set :port, 3000

post '/upload' do
halt 400, 'please upload file' if params[:file].nil?
path = "./public/#{params[:file][:filename]}".freeze
File.open(path, 'wb') { |f| f.write params[:file][:tempfile].read }
'ok'
end



client.rb

require 'httpclient'

c = HTTPClient.new
url = 'http://localhost:3000/upload'.freeze
path = ARGV.first
c.post(url, file: File.open(path, 'r'))