2012-08-02 7 views
8

Pracuję nad przesłaniem obrazu na serwer. Jestem w stanie przesłać obraz za pomocą iOS, ale gdy próbuję na Androidzie otrzymuję kod błędu 3. Obecnie korzystam z phonegap cordova 1.8.1.Phonegap FileTransfer.upload(), wyrzucając kod błędu 3 na Androida

Próbowałem już dodanie prawda parametrów

upload(filePath, server, successCallback, errorCallback, options, **true**); 

i dodanie tego

options.chunkedMode = false; 

Moje AndroidManifest plik zawiera:

<uses-permission android:name="android.permission.INTERNET" /> 

Mój plik cordova.xml zawiera:

<access origin="*"/> 

Czy czegoś brakuje?

Dzięki

+1

Mam ten sam kod błędu na iOS, w jaki sposób rozwiązałeś swój problem? – ADOConnection

+1

kod błędu oznaczają: 1 = FileTransferError.FILE_NOT_FOUND_ERR \t \t \t \t \t \t \t \t 2 = FileTransferError.INVALID_URL_ERR \t \t \t \t \t \t \t \t 3 = FileTransferError.CONNECTION_ERR \t \t \t \t \t \t \t \t 4 = FileTransferError .ABORT_ERR \t \t \t \t \t \t \t \t 5 = FileTransferError.NOT_MODIFIED_ERR –

Odpowiedz

-1

Wypróbuj jedno z nich:

Set android:debuggable="true" w <application> tagu pliku AndroidManifest.xml.

Set <access origin=".*"/> zamiast tylko * jak to zaleca się w komentarzach w sposób następujący:

<!-- <access origin="https://example.com" /> allow any secure requests to example.com --> 
<!-- <access origin="https://example.com" subdomains="true" /> such as above, but including subdomains, such as www --> 
<!-- <access origin=".*"/> Allow all domains, suggested development use only --> 
+0

. * Nie działa z PhoneGap build – ADOConnection

2

Stało się to dla mnie też. Należy określić chunkedMode=false (http://stackoverflow.com/questions/8522729/phonegap-filetransfer-upload-fails-on-android)

var options = FileUploadOptions(); 
options.chunkedMode = false; 
+0

Niestety, wyłączenie trybu pakietowego nie pomogło. – ottel142

0

Jest to utrwalona błąd w bibliotece PhoneGap, ponieważ nie było poprawki błędów, miałem dostać pracować przez moją pracę wokół (reupload zasadzie na każdej awarii alternatywnego): kod

ft.upload(path, 
      encodeURI("http://yourdomain.com/upload.php"), 
      function(result) { 
       alert("Uploaded"); 
      }, 
      function(error) { 
       ft.upload(path, 
       encodeURI("http://yourdomain.com/upload.php"), 
       function(result) { 
        alert("Uploaded");     
       }, 
       function(error) { 
        alert("Error uploading image"); 
       }, 
       { fileName: name, fileKey: "file", mimeType: "image/jpeg", chunkedMode: false }, true);  
      }, 
      { fileName: name, fileKey: "file", mimeType: "image/jpeg", chunkedMode: false }, true); 
+0

Nie rozwiąłem problemu, przez tydzień się nad tym rozwodzę. Jakieś inne sugestie? –

0

Poprosiłem Telerik o ten problem, który mam do czynienia z AppBuilder. Zgodnie z ich odpowiedzią it might be a bug in Cordova (używam 3.2).

Zalecają aktualizację do l atest FileTransfer library (również zaktualizuj wszystkie zależności) i sprawdź, czy to rozwiąże problem. Wpadłem na inny problem podczas kompilowania nowych bibliotek.

Polecam spróbować i sprawdzić, czy to działa dla Ciebie.

2

Są to kroki użyłem do przezwyciężenia tego problemu:

Dodano następujące opcje:

options.chunkedMode = false; 
options.headers = { 
     Connection: "close" 
    }; 

Ale ważniejsze było to, że używałem Genymotion jako emulatora dla testowania. Przesyłanie obrazu do localhost nie działało, ponieważ emulator działał w maszynie wirtualnej, a localhost oznaczał serwer lokalny maszyny wirtualnej, a nie lokalny serwer internetowy.

Więc zamiast przesyłania do 'localhost', należy przesłać do:

http://10.0.2.2 

i dodaj następującą linię do config.xml:

<access origin="10.0.2.2" subdomains="true"/> 

testowałem to i jego pracy jak urok. Zajęło mi to 3 dni, aby to zadziałało.

+1

'Połączenie:" zamknij "nagłówek' pracował dla mnie. DZIĘKUJĘ CI! –

0

ten może być również przyczyną, i rozwiązać go dla mnie:

iOS 9 i OSX 10.11 wymagać TLSv1.2 SSL dla wszystkich hostów, które zamierzasz poprosić o dane z chyba że podasz domen wyjątków w Twojej aplikacji Info. plik plist.

(CFNetwork SSLHandshake failed iOS 9)

6

Sprawa prawdopodobnie nie jest w PhoneGap. jeśli serwer jest serwerem opartym na systemie Windows, spróbuj użyć innego serwera. Ponadto, nie zapomnij dodać tych linii:

var options = new FileUploadOptions(); 
options.chunkedMode = false; 
options.headers = { 
     Connection: "close" 
    }; 
+0

To działało dla mnie z usługą webową PHP na komputerze z serwerem Windows. Wielkie dzięki – wezzy

+0

Po wypróbowaniu wielu rzeczy, przez kilka godzin, działało to dla mnie na serwerze sieciowym Ruby (Roda) na komputerze z systemem Windows. Dzięki! – globetrotter

+0

Potrzebowałem 'chunkedMode', ale' Connection: "close" 'header pracował dla mnie. Dzięki! –

Powiązane problemy