2012-09-28 12 views
7

Mam app cordova 2.0 dla Androida. Używam Plugin FileTransfer, aby załadować niektóre dane na mój serwer. Za pierwszym razem ładowanie jest wykonywane, wszystko działa poprawnie. Ale dostaję błąd EPIPE (Broken Pipe). Jeśli po prostu ponownie naciśnie przycisk przesyłania, działa.EPIPE (Broken Pipe) Błąd podczas korzystania z FileTransfer-plugin z cordova 2.0

Jak mogę zapobiec błędowi?

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

Znalazłeś rozwiązanie to jeszcze? – varevarao

+0

Niezupełnie, właśnie przesłałem ten plik ponownie. –

+0

Ah darn. Ten problem jest prawdziwą dolegliwością, prawie żadną pomocą i prawie nic, aby zrozumieć przyczynę. – varevarao

Odpowiedz

7

Mam również zmagają się z przypadkowych błędów przerywanych stanu HTTP i zatrudnili obejście użyciu var przechowywać ponownie status. I wtedy przyrost ten var jeśli przelew nie zwrotna jest wywoływana i ponowić funkcji przesyłania do 3 razy (choć nie wymagane więcej niż 1 powtórzenie):

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 
    } 
} 

Uwagi: Serwer jest biały giełdowych i mam próbował wyłączyć wyłączanie trybu chunkedMode bez powodzenia. Nie używam też zwykłego lub samopodpisanego protokołu SSL. W moim przypadku użytkownik może filtrować zdjęcie przed jego przesłaniem. Jeśli nie zostanie zastosowany żaden filtr, przesyłanie zawsze się powiedzie. Jeśli próbuje użytkowników stosując dowolny filtr, przesłać losowo niepowodzeniem z kodem błędu 3.

(i tak, wiem, że to rozwiązanie nie jest całkowicie idealne, ale lepsze to niż awarii odzyskanej.)

+0

Zrobiłem to w ten sposób, ale naprawdę nie podoba mi się to obejście. –

+0

wygląda na to, że nie mam wyboru, muszę wdrożyć tę samą metodę. – DdD

+0

Może to być naprawione w wersji 3.4.0: https://issues.apache.org/jira/browse/CB-2293 – user276648

Powiązane problemy