2012-09-28 16 views
7

Ho un'app cordova 2.0 per Android. Io uso il FileTransfer Plugin, per caricare alcuni dati sul mio server. La prima volta, il caricamento viene eseguito, tutto funziona correttamente. Ma poi ricevo un errore EPIPE (Broken Pipe). Se spingo di nuovo il pulsante di caricamento, funziona.Errore EPIPE (Broken Pipe) durante l'utilizzo di FileTransfer-plugin con cordova 2.0

Come posso evitare l'errore?

09-28 17:31:12.304: W/FileTransfer(29497): Error getting HTTP status code from connection. 
09-28 17:31:12.304: W/FileTransfer(29497): java.net.SocketException: sendto failed: EPIPE (Broken pipe) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.IoBridge.sendto(IoBridge.java:475) 
09-28 17:31:12.304: W/FileTransfer(29497): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507) 
09-28 17:31:12.304: W/FileTransfer(29497): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46) 
09-28 17:31:12.304: W/FileTransfer(29497): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.writeHex(ChunkedOutputStream.java:102) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.writeBufferedChunkToSocket(ChunkedOutputStream.java:128) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.close(ChunkedOutputStream.java:118) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:804) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:486) 
09-28 17:31:12.304: W/FileTransfer(29497): at org.apache.cordova.FileTransfer.createFileTransferError(FileTransfer.java:384) 
09-28 17:31:12.304: W/FileTransfer(29497): at org.apache.cordova.FileTransfer.upload(FileTransfer.java:316) 
09-28 17:31:12.304: W/FileTransfer(29497): at org.apache.cordova.FileTransfer.execute(FileTransfer.java:85) 
09-28 17:31:12.304: W/FileTransfer(29497): at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:192) 
09-28 17:31:12.304: W/FileTransfer(29497): at java.lang.Thread.run(Thread.java:856) 
09-28 17:31:12.304: W/FileTransfer(29497): Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.Posix.sendtoBytes(Native Method) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.Posix.sendto(Posix.java:146) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 
09-28 17:31:12.304: W/FileTransfer(29497): at libcore.io.IoBridge.sendto(IoBridge.java:473) 
09-28 17:31:12.304: W/FileTransfer(29497): ... 14 more 
09-28 17:31:12.319: E/FileTransfer(29497): {"target":"http:\/\/10.100.150.173:8081\/mobile110\/upload","source":"content:\/\/media\/external\/images\/media\/30","code":3} 
09-28 17:31:12.319: E/FileTransfer(29497): java.net.SocketException: sendto failed: EPIPE (Broken pipe) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:506) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.IoBridge.sendto(IoBridge.java:475) 
09-28 17:31:12.319: E/FileTransfer(29497): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507) 
09-28 17:31:12.319: E/FileTransfer(29497): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46) 
09-28 17:31:12.319: E/FileTransfer(29497): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.writeHex(ChunkedOutputStream.java:102) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.writeBufferedChunkToSocket(ChunkedOutputStream.java:128) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.net.http.ChunkedOutputStream.write(ChunkedOutputStream.java:77) 
09-28 17:31:12.319: E/FileTransfer(29497): at java.io.DataOutputStream.write(DataOutputStream.java:98) 
09-28 17:31:12.319: E/FileTransfer(29497): at org.apache.cordova.FileTransfer.upload(FileTransfer.java:261) 
09-28 17:31:12.319: E/FileTransfer(29497): at org.apache.cordova.FileTransfer.execute(FileTransfer.java:85) 
09-28 17:31:12.319: E/FileTransfer(29497): at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:192) 
09-28 17:31:12.319: E/FileTransfer(29497): at java.lang.Thread.run(Thread.java:856) 
09-28 17:31:12.319: E/FileTransfer(29497): Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.Posix.sendtoBytes(Native Method) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.Posix.sendto(Posix.java:146) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 
09-28 17:31:12.319: E/FileTransfer(29497): at libcore.io.IoBridge.sendto(IoBridge.java:473) 
09-28 17:31:12.319: E/FileTransfer(29497): ... 11 more 
+0

Hai trovato una soluzione per questo ancora? – varevarao

+0

Non proprio, ho appena inviato di nuovo il file. –

+0

Ah dannazione. Questo problema è un vero peccato, quasi nessun aiuto in giro e quasi nulla per capire la causa. – varevarao

risposta

7

Ho anche alle prese con errori di stato HTTP intermittenti casuali e hanno impiegato una soluzione utilizzando un var per memorizzare riprovare stato. Ho poi incrementare questo var se il trasferimento sicuro di callback viene chiamata e riprovare la funzione di upload fino a 3 volte (anche se non ha richiesto più di 1 tentativi):

var imageRetry = 0; // if upload errors, retry 3 times 
... 
// file transfer fail callback 
function fail(error) { 
    if(imageRetry < 3){ 
     imageRetry++; 
     uploadPhoto(); // call upload function again 
    }else{ 
     // normal failure handling 
    } 
} 

Note: Server è bianco quotato e ho provato a disabilitare anche chunkedMode senza successo. Inoltre, non utilizzo SSL normale o autofirmato. Nel mio caso, l'utente può filtrare una foto prima di caricarla. Se non viene applicato alcun filtro, il caricamento ha sempre esito positivo. Se tentativi utente applicare alcun filtro, caricare in modo casuale non riesce con il codice di errore 3.

(E sì, so che questa soluzione non è del tutto ideale, ma è meglio di un fallimento non recuperato.)

+0

L'ho fatto in questo modo, ma non mi piace molto questo workarround. –

+0

non sembra scelta, Devo distribuire lo stesso metodo – DdD

+0

Potrebbe essere risolto in 3.4.0: https://issues.apache.org/jira/browse/CB-2293 – user276648

Problemi correlati