21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/filefm/streaming_uploader.rb', line 21
def put(to_url, params = {}, &block)
boundary = '----RubyMultipartClient' + rand(1000000).to_s + 'ZZZZZ'
parts = []
content_file = nil
params.each do |key, value|
if value.kind_of?(File)
filepath = value.path
parts << StreamPart.new(value, File.size(filepath))
end
end
unless params.nil? || params.empty?
params.each do |key, value|
if value.kind_of?(File)
content_file = value
filepath = value.path
filename = File.basename(filepath)
parts << StringPart.new( "--" + boundary + "\r\n" +
"Content-Disposition: form-data; name=\"" + key.to_s + "\"; filename=\"" + filename + "\"\r\n" +
"Content-Type: application/octet-stream\r\n\r\n")
parts << StreamPart.new(value, File.size(filepath))
parts << StringPart.new("\r\n")
else
parts << StringPart.new( "--" + boundary + "\r\n" +
"Content-Disposition: form-data; Content-Type:application/json; name=\"" + key.to_s + "\"\r\n\r\n")
parts << StringPart.new(value.to_s + "\r\n")
end
end
parts << StringPart.new("--" + boundary + "--\r\n")
end
body_stream = MultipartStream.new(parts, block)
url = URI.parse(to_url)
= { 'Content-Length' => body_stream.size.to_s, 'Content-Type' => 'application/json' }.merge(params[:headers])
req = Net::HTTP::Put.new(url.path, )
Log.debug "HEADERS: " + .inspect
Log.debug "HOST: " + url.host
Log.debug "PORT: " + url.port.to_s
Log.debug "PATH: " + url.path
req.content_length = body_stream.size
req.content_type = 'multipart/form-data; boundary=' + boundary unless parts.empty?
req.body_stream = body_stream
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true if url.scheme == "https"
res = http.request(req)
res
end
|