Android MultipartEntity POST recibe todo, además de FileBody
Después de leer un montón de preguntas y respuestas, he decidido utilizar MultipartEntity. Esta respuesta debe ser la mejor: https://stackoverflow.com/a/2937140/1388723
Lo he implementado:
- Cómo abrir un archivo en carpeta sin procesar en Android
- Cambiar la longitud de cada ráfaga en la carga de archivos multipart en android
- Configuración de la codificación para una entidad multiparte
- Mejor método para subir imágenes al servidor php en Android?
- Entidad devuelve error en MultiPartEntityBuilder
private class SendImage extends AsyncTask<String, Void, Void> { String sresponse; @Override protected Void doInBackground(String... params) { HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost( "http://taras.xin.com.pl/loadimage.php"); InputStream in = null; try { MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE); Log.i("MultyPart", params[0]); File file = new File(params[0]); Log.i("MultyPartFILE", file.toString()); ContentBody fb = new FileBody(file, "image/jpeg"); Log.i("MultyPartFB", fb.toString()); entity.addPart("text", new StringBody( "This text was added to posrt")); entity.addPart("word", new StringBody( "This text was added to post")); entity.addPart("file", fb); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost, localContext); in = response.getEntity().getContent(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader( new InputStreamReader(in, "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } in.close(); sresponse = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } return null; } @Override protected void onPostExecute(Void result) { runOnUiThread(new Runnable() { @Override public void run() { text.setText(sresponse); } }); super.onPostExecute(result); } }
y mi loadimage.php:
<?php var_dump($_POST); var_dump($_FILE); ?>
Recibo dos cadenas a $ _POST, pero no hay ni siquiera sombra de FileBody (archivo). $ _FILE da null.
Para ser exactos he descargado httpcomponents-client-4.2.2-bin, extraído httpmime-4.2.2.jar.
- Problema Envío de archivos multipart con límite a través de Volley
- Editar encabezados de MultiPartEntity
- Apache HttpClient Android (Gradle)
- Los parámetros @Part sólo se pueden utilizar con la codificación multipart. (Parámetro # 8)
- Codificación UTF-8 con FileBody en MultipartEntity
- MultipartEntity y Json
- ¿Cuál es la forma estándar de publicar el objeto JSON junto con el archivo utilizando MultipartEntityBuilder y el cliente HTTP en Android
- Android: cargar imagen y JSON utilizando MultiPartEntityBuilder
intenta obtener sólo el archivo que estás enviando
$ file = $ _FILES ['archivo'];