Class: FaceAi::MultiPart

Inherits:
Object show all
Defined in:
lib/baiduAiFace/client.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMultiPart

Returns a new instance of MultiPart.



46
47
48
49
50
# File 'lib/baiduAiFace/client.rb', line 46

def initialize
  @fields = []
  @files = []
  @boundary = [SecureRandom.random_bytes(15)].pack('m*').chop!
end

Class Method Details

.guess_mime(filename) ⇒ Object



60
61
62
63
# File 'lib/baiduAiFace/client.rb', line 60

def self.guess_mime filename
  res = MIME::Types.type_for(filename)
  res.empty? ? 'application/octet-stream' : res[0]
end

Instance Method Details

#add_field(name, value) ⇒ Object



52
53
54
# File 'lib/baiduAiFace/client.rb', line 52

def add_field name, value
  @fields << [name, value]
end

#add_file(name, filepath) ⇒ Object



56
57
58
# File 'lib/baiduAiFace/client.rb', line 56

def add_file name, filepath
  @files << [name, filepath]
end

#content_typeObject



69
70
71
# File 'lib/baiduAiFace/client.rb', line 69

def content_type
  "multipart/form-data; boundary=#{@boundary}"
end

#has_file?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/baiduAiFace/client.rb', line 65

def has_file?
  not @files.empty?
end

#inspectObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/baiduAiFace/client.rb', line 73

def inspect
  res = StringIO.new
  append_boundary = lambda { res.write "--#{@boundary}\r\n" }
  @fields.each do |field|
    append_boundary[]
    res.write "Content-Disposition: form-data; name=\"#{field[0]}\"\r\n\r\n#{field[1]}\r\n"
  end
  @files.each do |file|
    append_boundary[]
    res.write "Content-Disposition: file; name=\"#{file[0]}\"; filename=\"#{file[1]}\"\r\n"
    res.write "Content-Type: #{self.class.guess_mime file[1]}\r\n"
    res.write "Content-Transfer-Encoding: binary\r\n\r\n"
    res.write File.open(file[1]).read
    res.write "\r\n"
  end
  res.write "--#{@boundary}--\r\n"
  res.rewind
  res.read
end