Pedro, miembro de este equipo de trabajo, nos ha hecho el favor de escribir esta sección porque controla muy bien el tema.
Solución:
Usamos HttpClient 4.x para hacer una publicación de archivos de varias partes.
ACTUALIZAR: A partir de Cliente Http 4.3, algunas clases han quedado en desuso. Aquí está el código con la nueva API:
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost uploadFile = new HttpPost("...");
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody("field1", "yes", ContentType.TEXT_PLAIN);
// This attaches the file to the POST:
File f = new File("[/path/to/upload]");
builder.addBinaryBody(
"file",
new FileInputStream(f),
ContentType.APPLICATION_OCTET_STREAM,
f.getName()
);
HttpEntity multipart = builder.build();
uploadFile.setEntity(multipart);
CloseableHttpResponse response = httpClient.execute(uploadFile);
HttpEntity responseEntity = response.getEntity();
A continuación se muestra el fragmento de código original con API HttpClient 4.0 en desuso:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
FileBody bin = new FileBody(new File(fileName));
StringBody comment = new StringBody("Filename: " + fileName);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("bin", bin);
reqEntity.addPart("comment", comment);
httppost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httppost);
HttpEntity resEntity = response.getEntity();
Estas son las dependencias de Maven que tengo.
Código Java:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
FileBody uploadFilePart = new FileBody(uploadFile);
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("upload-file", uploadFilePart);
httpPost.setEntity(reqEntity);
HttpResponse response = httpclient.execute(httpPost);
Dependencias de Maven en pom.xml:
org.apache.httpcomponents
httpclient
4.0.1
compile
org.apache.httpcomponents
httpmime
4.0.1
compile
Si el tamaño de los JAR es importante (por ejemplo, en el caso de un subprograma), también se puede usar directamente httpmime con java.net.HttpURLConnection en lugar de HttpClient.
httpclient-4.2.4: 423KB
httpmime-4.2.4: 26KB
httpcore-4.2.4: 222KB
commons-codec-1.6: 228KB
commons-logging-1.1.1: 60KB
Sum: 959KB
httpmime-4.2.4: 26KB
httpcore-4.2.4: 222KB
Sum: 248KB
Código:
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("POST");
FileBody fileBody = new FileBody(new File(fileName));
MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.STRICT);
multipartEntity.addPart("file", fileBody);
connection.setRequestProperty("Content-Type", multipartEntity.getContentType().getValue());
OutputStream out = connection.getOutputStream();
try
multipartEntity.writeTo(out);
finally
out.close();
int status = connection.getResponseCode();
...
Dependencia en pom.xml:
org.apache.httpcomponents
httpmime
4.2.4
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)