2012-05-30 15 views
5

Me gustaría enviar (en Java) una solicitud multiparte/mixta, donde una parte es del tipo 'application/json' y la otra de tipo 'application/pdf'. ¿Alguien sabe de una biblioteca que me permita hacer esto fácilmente? Sorprendentemente, no he podido encontrar uno.Generar solicitud HTTP mixta/multiparte en Java

Generaré el JSON, pero necesito poder establecer el tipo de contenido de esa parte en 'application/json'.

Muchas gracias, Daniel

Respuesta

4

fácil, utilizan el Apache Http-client library (este código se utiliza la versión 4.1 y los frascos httpclient, httpcore y httpmime), he aquí una muestra:

package com.officedrop.uploader; 

import java.io.File; 
import java.net.URL; 

import org.apache.http.HttpHost; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.mime.HttpMultipartMode; 
import org.apache.http.entity.mime.MultipartEntity; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.impl.client.DefaultHttpClient; 

public class SampleUploader { 

    public static void main(String[] args) throws Exception { 

     DefaultHttpClient httpclient = new DefaultHttpClient(); 
     String basePath = "http://localhost/"; 

     URL url = new URL(basePath); 

     HttpHost targetHost = new HttpHost(url.getHost(), url.getPort(), url.getProtocol()); 

     HttpPost httpost = new HttpPost(String.format("%s%s", basePath, "ze/api/documents.xml")); 

     MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

     entity.addPart("file_1", new FileBody(new File("path-to-file.pdf") , "file.pdf", "application/pdf", null)); 
     entity.addPart("uploaded_data_1", new FileBody(new File("path-to-file.json") , "file.json", "application/json", null));  

     httpost.setEntity(entity); 

     HttpResponse response = httpclient.execute(targetHost, httpost); 

    } 

} 
+0

Hola Maurício, gracias por la sugerencia. Sin embargo, la solicitud se genera con un tipo de contenido 'multipart/form-data' en lugar de 'multipart/mixed'. No he encontrado una manera de cambiar eso, ¿sabes cómo? – Daniel

+0

¿Por qué es necesario mezclarlo? ¿Alguna razón específica? Cualquier servidor/marco HTTP podrá decodificar estos archivos correctamente. –

+0

La documentación del servicio al que llamo requiere una combinación, pero ahora parece que la documentación es errónea. :) ¡Gracias de nuevo! – Daniel