class MovieMasher::HttpUploadService
uploads via http
Public Instance Methods
secure()
click to toggle source
# File service/remote/http_upload.rb, line 46 def secure false end
upload(options)
click to toggle source
# File service/remote/http_upload.rb, line 6 def upload(options) output = options[:output] file = options[:file] output_destination = options[:destination] output_content_type = output[:mime_type] path = options[:path] url = "#{output_destination[:type]}://#{output_destination[:host]}" url += Path.add_slash_start(path) uri = URI(url) uri.port = output_destination[:port].to_i if output_destination[:port] parameters = output_destination[:parameters] if parameters.is_a?(Hash) && !parameters.empty? parameters = Marshal.load(Marshal.dump(parameters)) Evaluate.object(parameters, job: options[:job], output: output) uri.query = URI.encode_www_form parameters end file_name = File.basename(file) io = File.open(file) raise(Error::Object, "could not open file #{file}") unless io upload_io = UploadIO.new(io, output_content_type, file_name) req = Net::HTTP::Post::Multipart.new(uri, key: output.file_name, file: upload_io) unless req raise(Error::JobUpload, 'could not construct multipart POST request') end if output_destination[:user] && output_destination[:pass] req.basic_auth(output_destination[:user], output_destination[:pass]) end Net::HTTP.start(uri.host, uri.port, use_ssl: secure) do |http| result = http.request(req) if result.code.to_i != 200 msg = "#{result.code} upload #{uri} response #{result.body}" raise(Error::JobUpload, msg) end end io.close end