EPIPE (Broken pipe) durante la carga?

Tengo un problema en mi código, pero no sé dónde está el informe de registro E

04-08 05:47:46.745: E/Upload Server(20080): Starting : /storage/sdcard1/Music/Piano (my favourites)/11 Tchaikovsky - The Music Lovers.mp3 04-08 05:47:47.136: E/Upload Server(20080): Connection Error : sendto failed: EPIPE (Broken pipe) 

¿Qué es (EPIPE)? , Cuando intento cargar la imagen su upload con éxito pero cualquier otro archivo E Cat report (Broken pipe) por qué!

Este es mi código de subida

  @Override protected String doInBackground(String... urls) { String upLoadServerUri = "http://test.com/test.php"; String fileName = this.file_path; HttpURLConnection connection = null; DataOutputStream outputStream = null; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1*1024*1024; File sourceFile = new File(fileName); int sentBytes = 0; long fileSize = sourceFile.length(); connection = null; try { FileInputStream fileInputStream = new FileInputStream(sourceFile); Log.e("Upload Server ", "Starting : "+ fileName ); URL url = new URL(upLoadServerUri); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.setDoOutput(true); connection.setUseCaches(false); connection.setChunkedStreamingMode(1024); connection.setRequestMethod("POST"); connection.setRequestProperty("Connection", "Keep-Alive"); connection.setRequestProperty("Content-Type","multipart/form-data;boundary="+boundary); outputStream = new DataOutputStream(connection.getOutputStream() ); outputStream.writeBytes(twoHyphens + boundary + lineEnd); outputStream.writeBytes("Content-Disposition: form-data; name=\"file[]\";filename=\""+ fileName + "\"" + lineEnd); outputStream.writeBytes(lineEnd); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { if(isCancelled()){ break; } sentBytes += bytesRead; double percentDone = (sentBytes * 1.0) / fileSize * 100; publishProgress((int)percentDone); outputStream.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } if(isCancelled()){ fileInputStream.close(); outputStream.flush(); outputStream.close(); Log.e("Upload Server ", "upload Canceled " ); return "canceled"; } outputStream.writeBytes(lineEnd); outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); int serverResponseCode = connection.getResponseCode(); fileInputStream.close(); outputStream.flush(); outputStream.close(); if(serverResponseCode == 200) { Scanner s; s = new Scanner(connection.getInputStream()); s.useDelimiter("\\Z"); final String response = s.next(); Log.e("Upload Server ", "Message : " + response); return response; }else { Log.e("Upload Server ", "Server Code Error : " + serverResponseCode ); return "faild"; } } catch (final Exception e) { Log.e("Upload Server ", "Error : " + e.getMessage() ); } return "falid"; } 

Por favor nota objetivo aún más reciente en aplicaciones Android 🙂 i googled mi problema no pude encontrar una solución por favor ayuda!

2 Solutions collect form web for “EPIPE (Broken pipe) durante la carga?”

'Broken pipe' significa que has escrito en una conexión que ya ha sido cerrada por el par.

Probablemente ha superado un límite de tamaño de subida.

También debe tener en cuenta que el uso de available() no es válido. Hay una advertencia específica en el Javadoc acerca de no usarla de la manera que la está utilizando. Usted no lo necesita de todos modos:

 while ((count = in.read(buffer)) > 0) { out.write(buffer, 0, count); } 

Donde buffer es cualquier tamaño razonable, por ejemplo 8192 bytes.

Tuve un problema similar con HttpURLConnection . Solo agrega:

 conn.setRequestProperty("connection", "close"); // disables Keep Alive 

A su conexión o inhabilitarla para todas las conexiones:

 System.setProperty("http.keepAlive", "false"); 

Desde la API sobre disconnect ():

Libera esta conexión para que sus recursos puedan ser reutilizados o cerrados. A diferencia de otras implementaciones de Java, esto no necesariamente cerrará las conexiones de socket que pueden ser reutilizadas. Puede desactivar toda la reutilización de conexión estableciendo la propiedad del sistema http.keepAlive en false antes de emitir cualquier solicitud HTTP.

Por lo tanto, Android reutilizará la conexión de socket antiguo. Si lo deshabilitas con el código anterior, puedes arreglarlo.

  • Retrofit 2 Método RequestBody writeTo () llamado dos veces
  • Creación de una cola de carga
  • Android Studio nunca termina de cargar la aplicación en el Nexus 10
  • ¿Cómo subir videos a youtube en android?
  • ¿Qué sucede después de que DTR / RTS sea enviado a una placa Arduino basada en FTDI?
  • Cargar un archivo a través de un formulario HTTP, a través de MultipartEntityBuilder, con una barra de progreso
  • ¿Hay alguna forma de obtener el progreso de subida correctamente con HttpUrlConncetion?
  • Descarga de archivos de Android mediante HTTP PUT
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.