With ver. 2.0.6, we can POST multipart data. It's very convenient.But "\n" is used as line end in create_query_multipart_srt method and it should be "CRLF" which you have defined as "\r\n".
And I have added support of some files for mime_type method and some modification. Following are patch for lib/http.rb
*** http.rb.orig 2006-01-16 13:47:12.000000000 +0900
--- http.rb 2006-01-16 14:08:17.000000000 +0900
***************
*** 474,488 ****
param_str = params.to_a.collect { |k, v|
"#{k}=\"#{v}\""
}.join("; ")
! "--#{boundary}\n" +
! %{Content-Disposition: form-data; name="#{attr.to_s}"; #{param_str}\n} +
! "Content-Type: #{mime_type(value.path)}\n\n#{value.read}\n"
else
! "--#{boundary}\n" +
! %{Content-Disposition: form-data; name="#{attr.to_s}"\n} +
! "\n#{value.to_s}\n"
end
! }.join('') + "--#{boundary}--\n"
else
query.to_s
end
--- 474,488 ----
param_str = params.to_a.collect { |k, v|
"#{k}=\"#{v}\""
}.join("; ")
! "--#{boundary}" + CRLF +
! %{Content-Disposition: form-data; name="#{attr.to_s}"; #{param_str}} + CRLF +
! "Content-Type: #{mime_type(value.path)}" + CRLF + CRLF + "#{value.read}" + CRLF
else
! "--#{boundary}" + CRLF +
! %{Content-Disposition: form-data; name="#{attr.to_s}"} + CRLF +
! CRLF + "#{value.to_s}" + CRLF
end
! }.join('') + "--#{boundary}--" + CRLF
else
query.to_s
end
***************
*** 507,518 ****
def mime_type(path)
case path
! when /.(htm|html)$/
'text/html'
! when /.doc$/
'application/msword'
else
! 'text/plain'
end
end
end
--- 507,526 ----
def mime_type(path)
case path
! when /\.txt$/i
! 'text/plain'
! when /\.(htm|html)$/i
'text/html'
! when /\.doc$/i
'application/msword'
+ when /\.png/i
+ 'image/png'
+ when /\.gif$/i
+ 'image/gif'
+ when /\.jp[e]*g$/i
+ 'image/jpeg'
else
! 'application/unknown'
end
end
end