java multipartform-data apache-httpclient-4.x

java - Apache HttpClient haciendo publicación de formulario multiparte



multipartform-data apache-httpclient-4.x (3)

MultipartEntity ahora aparece como obsoleto. Estoy usando apache httpclient 4.3.3. ¿Alguien sabe lo que se supone que debemos usar en su lugar? Las búsquedas de Google están tan llenas de ejemplos de MultipartEntity que no puedo encontrar nada. - vextorspace 31 de marzo de 14 a 20:36

Aquí está el código de muestra en HttpClient 4.3.x

http://hc.apache.org/httpcomponents-client-4.3.x/httpmime/examples/org/apache/http/examples/entity/mime/ClientMultipartFormPost.java

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);

Para usar la clase MultipartEntityBuilder, necesita httpmime , que es un proyecto secundario de 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

Soy bastante ecologista con HttpClient y me resulta extremadamente frustrante la falta de documentación (y / o descaradamente incorrecta). Estoy intentando implementar la siguiente publicación (enumerada a continuación) con Apache Http Client, pero no tengo idea de cómo hacerlo realmente. Voy a enterrarme en la documentación para la próxima semana, pero tal vez los codificadores HttpClient más experimentados puedan obtener una respuesta antes.

Enviar:

Content-Type: multipart/form-data; boundary=---------------------------1294919323195 Content-Length: 502 -----------------------------1294919323195 Content-Disposition: form-data; name="number" 5555555555 -----------------------------1294919323195 Content-Disposition: form-data; name="clip" rickroll -----------------------------1294919323195 Content-Disposition: form-data; name="upload_file"; filename="" Content-Type: application/octet-stream -----------------------------1294919323195 Content-Disposition: form-data; name="tos" agree -----------------------------1294919323195--


Use MultipartEntityBuilder desde la biblioteca HttpMime para realizar la solicitud que desee.

En mi proyecto lo hago de esta manera:

HttpEntity entity = MultipartEntityBuilder .create() .addTextBody("number", "5555555555") .addTextBody("clip", "rickroll") .addBinaryBody("upload_file", new File(filePath), ContentType.create("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();

Espero que esto ayude

(Actualicé esta publicación para usar MultipartEntityBuilder en lugar de MultipartEntity en desuso, usando el código @mtomy como ejemplo)


si usa el paquete org.apache.commons.httpclient.HttpClient, tal vez eso pueda ayudarlo.

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();