On Thu, Apr 23, 2009 at 03:15:35PM +0100, Richard Jones wrote: > 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?
Yes, it is. 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. > Please open a change request in JIRA. There should be no problem adding more methods to the FormBodyPart class. Cheers Oleg > Cheers, > > Richard > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
