I''m trying to post multipart content (a file and some strings) to a
Sinatra server on localhost using a java client. It seems the server
doesn''t like the POST message. The stack trace is:
************************************************************************************
ERROR NoMethodError: undefined method `rewind'' for
"hi":String
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
utils.rb:581:in`block in parse_multipart''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
utils.rb:499:in`loop''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
utils.rb:499:in`parse_multipart''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
request.rb:270:in `parse_multipart''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
request.rb:148:in `POST''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
methodoverride.rb:15:in `call''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/sinatra-1.2.6/lib/sinatra/
base.rb:1272:in `block in call''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/sinatra-1.2.6/lib/sinatra/
base.rb:1303:in `synchronize''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/sinatra-1.2.6/lib/sinatra/
base.rb:1272:in `call''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
content_length.rb:13:in `call''
D:/Ruby192/lib/ruby/gems/1.9.1/gems/rack-1.2.3/lib/rack/
handler/webrick.rb:52:in `service''
D:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:111:in
`service''
D:/Ruby192/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run''
D:/Ruby192/lib/ruby/1.9.1/webrick/server.rb:183:in `block in
start_thread''
************************************************************************************
My server prints out the params in the post message. Here''s what they
are for my java client:
************************************************************************************
Content-Disposition: form-data; name="file";
filename="fff.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: binary
#<File:0xedbc10>
Content-Disposition: form-data; name="jjj"
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
hi
************************************************************************************
The java code I''m using is:
************************************************************************************
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost:4567/upload");
File file = new File("D:/My Documents/My Desktop/fff.jpg");
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbFile = new FileBody(file, "image/jpeg");
mpEntity.addPart("file", cbFile);
ContentBody stringBody = new StringBody("hi",
Charset.forName("UTF8"));
mpEntity.addPart("jjj", stringBody);
httppost.setEntity(mpEntity);
HttpResponse response = httpclient.execute(httppost);
************************************************************************************
So it seems Rack doesn''t like dealing with content type when the
content type is a string. When I set the content_type variable inside
rack/utils.rb to nil when the param is not a file everything works
fine. Is this intentional or should it be submitted as a bug?
See also http://blogs.oracle.com/mandy/entry/rack_and_content_type_for.
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.