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