diff options
Diffstat (limited to 'lib/mogilefs')
-rw-r--r-- | lib/mogilefs/http_stream.rb | 22 | ||||
-rw-r--r-- | lib/mogilefs/mogilefs.rb | 2 |
2 files changed, 21 insertions, 3 deletions
diff --git a/lib/mogilefs/http_stream.rb b/lib/mogilefs/http_stream.rb index 4d5e456..3f84b9b 100644 --- a/lib/mogilefs/http_stream.rb +++ b/lib/mogilefs/http_stream.rb @@ -24,7 +24,11 @@ class MogileFS::HTTPStream @to_io = sock @uri = uri @devid = devid - @writer = MogileFS::Chunker.new(@to_io, @md5, @opts[:content_md5]) + if ! @md5 && @opts[:content_length] + @writer = @to_io + else + @writer = MogileFS::Chunker.new(@to_io, @md5, @opts[:content_md5]) + end return rescue SystemCallError => e sock.close if sock && ! sock.closed? @@ -47,6 +51,13 @@ class MogileFS::HTTPStream def commit @writer.flush + + clen = @opts[:content_length] + if clen && @bytes_uploaded != clen + raise MogileFS::SizeMismatchError, + "did not upload expected content_length: #{clen} uploaded: " \ + "#@bytes_uploaded" + end read_response(@to_io) # raises on errors create_close(@devid, @uri, @bytes_uploaded) ensure @@ -57,7 +68,7 @@ class MogileFS::HTTPStream host_with_port = "#{uri.host}:#{uri.port}" headers = "PUT #{uri.request_uri} HTTP/1.1\r\n" \ "Host: #{host_with_port}\r\n" \ - "Transfer-Encoding: chunked\r\n" + content_md5 = @opts[:content_md5] if String === content_md5 headers << "Content-MD5: #{content_md5}\r\n" @@ -67,6 +78,13 @@ class MogileFS::HTTPStream @md5 = Digest::MD5.new headers << "Trailer: Content-MD5\r\n" end + + if ! @md5 && clen = @opts[:content_length] + headers << "Content-Length: #{clen}\r\n" + else + headers << "Transfer-Encoding: chunked\r\n" + end + sock.write(headers << "\r\n") end diff --git a/lib/mogilefs/mogilefs.rb b/lib/mogilefs/mogilefs.rb index 40927d4..50484d8 100644 --- a/lib/mogilefs/mogilefs.rb +++ b/lib/mogilefs/mogilefs.rb @@ -162,7 +162,7 @@ class MogileFS::MogileFS < MogileFS::Client case (dests[0][1] rescue nil) when %r{\Ahttp://} http_file = case opts[:largefile] - when :chunked + when :chunked,:stream MogileFS::HTTPStream when :tempfile require 'mogilefs/http_tempfile' |