Apache HttpClient making multipart form post
Use MultipartEntityBuilder from the HttpMime library to perform the request you want.
In my project I do that this way:
HttpEntity entity = MultipartEntityBuilder .create() .addTextBody("number", "5555555555") .addTextBody("clip", "rickroll") .addBinaryBody("upload_file", new File(filePath), ContentType.APPLICATION_OCTET_STREAM, "filename") .addTextBody("tos", "agree") .build();HttpPost httpPost = new HttpPost("http://some-web-site");httpPost.setEntity(entity);HttpResponse response = httpClient.execute(httpPost);HttpEntity result = response.getEntity();
Hope this will help.
(Updated this post to use MultipartEntityBuilder instead of deprecated MultipartEntity, using @mtomy code as the example)
MultipartEntity now shows up as deprecated. I am using apache httpclient 4.3.3 - does anyone know what we are supposed to use instead? I find the google searches to be so full of MultipartEntity examples I can't find anything. – vextorspace Mar 31 '14 at 20:36
Here is the sample code in HttpClient 4.3.x
import org.apache.http.entity.mime.MultipartEntityBuilder;HttpPost httppost = new HttpPost("http://localhost:8080" + "/servlets-examples/servlet/RequestInfoExample");FileBody bin = new FileBody(new File(args[0]));StringBody comment = new StringBody("A binary file of some kind", ContentType.TEXT_PLAIN);HttpEntity reqEntity = MultipartEntityBuilder.create() .addPart("bin", bin) .addPart("comment", comment) .build();httppost.setEntity(reqEntity);
To use the class MultipartEntityBuilder, you need httpmime, which is a sub project of HttpClient
HttpClient 4.3.x:
http://hc.apache.org/httpcomponents-client-4.3.x/index.html
httpmime 4.3.x:
http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/dependency-info.html
if use org.apache.commons.httpclient.HttpClient package, maybe that can help you!
HttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager(); //here should set HttpConnectionManagerParams but not important for you HttpClient httpClient = new HttpClient(httpConnectionManager); PostMethod postMethod = new PostMethod("http://localhost/media"); FilePart filePart = new FilePart("file", new File(filepath)); StringPart typePart = new StringPart("type", fileContent.getType(), "utf-8"); StringPart fileNamePart = new StringPart("fileName", fileContent.getFileName(), "utf-8"); StringPart timestampPart = new StringPart("timestamp", ""+fileContent.getTimestamp(),"utf-8"); Part[] parts = { typePart, fileNamePart, timestampPart, filePart }; MultipartRequestEntity multipartRequestEntity = new MultipartRequestEntity(parts, postMethod.getParams()); postMethod.setRequestEntity(multipartRequestEntity); httpClient.executeMethod(postMethod); String responseStr = postMethod.getResponseBodyAsString();