Skip to content

Instantly share code, notes, and snippets.

@Thermatix
Forked from sasimpson/gist:1112739
Last active November 11, 2015 14:38
Show Gist options
  • Save Thermatix/3a8138baf705b55a565c to your computer and use it in GitHub Desktop.
Save Thermatix/3a8138baf705b55a565c to your computer and use it in GitHub Desktop.
Ruby Net:HTTP chunked transfer
require 'uri'
require 'net/http'
class Chunked
def initialize(data, chunk_size)
@size = chunk_size
if data.respond_to? :read
@file = data
end
end
def read(foo)
if @file
@file.read(@size)
end
end
def eof!
@file.eof!
end
def eof?
@file.eof?
end
end
#in sinatra
post '/image' do
cross_origin
name = params[:name]
my_file = params[:my_file]
unless params[:my_file] && (tmpfile = params[:my_file][:tempfile])
@error = "No file selected"
return haml(:upload)
end
parsed = URI::parse(@storage_url)
conn = Net::HTTP.new(parsed.host, parsed.port)
fp = File::open(tmpfile)
parsed.path += '/foo/test.txt'
chunked = Chunked.new(fp, 5)
request = Net::HTTP::Put.new parsed.request_uri, {'x-auth-token' => @auth_token, 'Transfer-Encoding' => 'chunked', 'content-type' => 'text/plain'}
request.body_stream = chunked
conn.start do |http|
http.request(request)
end
fp.close
"Upload complete\n"
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment