Hi Oleg,
http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpmime/src/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java

Following this example, I have re-written my code as follows:

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(target);

// set the request headers
post.setHeader("Slug", slug);
post.setHeader("X-On-Behalf-Of", user);

// construct the xml and binary file parts
FileBody xmlBody = new FileBody(new File(xml));
FileBody binBody = new FileBody(new File(binary));

MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("atom", xmlBody);
reqEntity.addPart("binary", binBody);

post.setEntity(reqEntity);
HttpResponse response = client.execute(post);

But I still don't see any way of passing in http headers for the mime parts. I presume that I'm missing something fundamental about how to use httpclient 4 with the httpmime extension, but I can't find any examples of doing what it is that i'm trying to do to follow.

What am I missing?


You will have to subclass FormBodyPart class and override its
#generateContentDisp() method. You will also have to implement a custom
HttpEntity similar to MultipartEntity shipped with HttpMime, which makes use of
the extended FormBodyPart class.

OK, I think I'm part way there. After taking a look at the source for FormBodyPart, I came up with this, which I think means that I don't actually have to extend that class:

FileBody binBody = new FileBody(new File(binary));
FormBodyPart fb = new FormBodyPart("binary", binBody);
fb.getHeader().removeFields(MIME.CONTENT_DISPOSITION);
fb.getHeader().addField(new MinimalField(MIME.CONTENT_DISPOSITION, "my-custom-disposition"));

Now all I need to do is get the FormBodyPart into the request, which is where I'm now stuck. Obviously, the MultipartEntity doesn't take the FormBodyPart as an argument to addPart(), although it sounds like it should. Is this what you are suggesting I need to implement for HttpEntity, above? Or is there some other way of getting this formbodypart into the request?

If I have some feedback for the httpclient 4.0 version, I'd say that this is a particularly challenging and circuitous bit of coding to achieve a relatively minor actual change in the http request. An API to do this sort of thing, without needing custom implementations of http client interfaces would be really useful.

Cheers,

Richard


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to