¿Cómo obtener Entity en el servlet usando MultipartEntity?

Si subo un archivo a mi servlet de esta manera:

HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write"); try { MultipartEntity entity = new MultipartEntity(); entity.addPart("type", new StringBody("photo")); entity.addPart("data", new FileBody(image)); httppost.setEntity(entity); HttpResponse response = httpclient.execute(httppost); } catch (ClientProtocolException e) {} catch (IOException e) {} 

¿Cómo puedo recuperar el contenido en el servlet?

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { request.??? } 
  • Estoy utilizando Google App Server como mi API Servlet

Si la versión de su Servlet Container o Server o Engine <3.0 (como 2.5 o anterior), puede aprovechar la biblioteca de terceros Apache Commons FileUpload . Aunque el archivo implica un uso para los archivos subidos, también reparte eficazmente con datos publicados cargado de POST-Métodos como explicó aquí .

La API Servlet, desde la versión 3.0 ofrece algunas llamadas en oder para tratar con los datos publicados, con se envió dentro de una solicitud POST. El único requisito es que la codificación MIME-Type del contenido de su entidad sea " multipart / form-data ".

Entonces tu puedes recuperar cada "parte" de tu contenido usando cualquiera de los siguientes:

  1. GetPart (String partName) : donde "partName" es el nombre de una parte de su entidad Multicontent.

     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { String partName = "type"; // or "data" Part part = request.getPart(partName); // read your StringBody type BufferedReader reader = new BufferedReader( new InputStreamReader(part.getInputStream())); String line =""; while((line=reader.readLine())!=null) { // do Something with a line System.out.println(line); } // or with a binary Data partName="data"; part = request.getPart(partName); // read your FileBody data InputStream is = part.getInputStream(); // do Something with you byte data is.read(); // is.read(b); // .. } 
  2. GetParts () :

Logra los mismos resultados que getPart (partName), mientras que los datos dados aquí una colección de toda la parte de los datos enviados. Para recuperar cada par de la parte de esta colección, sólo use la iteración thread-safe sobre la colección:

 Iterator<Part> iterator = request.getParts().iterator(); Part parts = null; while (iterator.hasNext()) { parts = (Part) iterator.next(); //rest of the code block removed } } 

Debido a que getPart () / getParts () sólo funciona empezando en la versión Servlet 3.0, asegúrese de usar el contenedor Servlet secundario y / o actualizar su contenedor Servlet actual. Algún contenedor de Servlet o Servlet que soporte 3.0:

  1. Tomcat 7.0 :
  2. Jboss Web
  3. Resina
  • ¿Cómo puedo pasar varios parámetros en la URL?
  • ¿Cómo obtener InputStream de un https, Push Servlet fragmentado?
  • ¿Cómo puedo verificar los datos firmados que vienen para la aplicación de facturación de Android Market utilizando Java (Servlet)
  • Subir varios archivos de Android a AppEngine en 1 solicitud
  • Android: conexión HTTPS (SSL) mediante HttpsURLConnection
  • Transferencia de datos enormes del servlet a la aplicación Android
  • Codificación de caracteres por defecto Jersey / Rest
  • Autenticación de Facebook en mi servidor con Android
  • Comprueba si la aplicación está disponible en Android Market
  • ¿Cómo puedo enviar un campo de texto en la solicitud POST que carga un blob en Blobstore y lo recupero en el controlador de carga del blob?
  • ¿Cómo puedo recibir notificaciones desde un servidor a un dispositivo Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.