2012-11-19 34 views
2

如何在Android中使用https協議下載文件?我嘗試使用它,但不斷收到錯誤。如何從android phonegap應用程序中的https URI下載文件?

我的下載代碼:

var fileTransfer = new FileTransfer(); 
      fileTransfer.download(
       task_url, 
       fileListDir + fileName, 
      function(entry) { 
       mylog("download complete: " + entry.fullPath); 
      }, 
      function(error) { 
       mylog("download error source " + error.source); 
       mylog("download error target " + error.target); 
       mylog("upload error code" + error.code); 
      }); 

我的日誌

11-19 13:56:13.339:E /文件傳輸(17969): { 「目標」:「到/ mnt/SD卡/task1/Picture_4.jpg","source":"https://91.228.199.95/ksiywFac63f2hs/fotos.gleb/Picture_4.jpg","code":3} 11-19 13:56:13.339:E/FileTransfer(17969): javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException:信任錨點找不到認證路徑。 11-19 13:56:13.339: E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:477) 11-19 13:56:13.339 :E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:328) 11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.setupSecureSocket(HttpConnection.java:185) 11-19 13:56:13.339:E /文件傳輸(17969):在 有機apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl $ HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:433) 11-19 13:56:13.339:E/FileTransfer(17969):在 org.apache.harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl $ HttpsEngine.makeConnection(HttpsURLConnectionImpl.java:378) 11-19 13:56:13.339:E/FileTransfer(17969):在 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:205) 11-19 13:56:13.339:E/FileTransfer(17969):在 org.apache .harmony.luni.internal.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:152) 11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.cordova。 FileTransfer.download(FileTransfer.java:486)11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.cordova.FileTransfer.execute(FileTransfer.java:88)11-19 13 :56:13.339:E/F ileTransfer(17969):at org.apache.cordova.api.PluginManager $ 1.run(PluginManager.java:231) 11-19 13:56:13.339:E/FileTransfer(17969):at java.lang.Thread .run(Thread.java:1019)11-19 13:56:13.339: E/FileTransfer(17969):導致: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:Trust anchor for未找到 認證路徑。 11-19 13:56:13.339: E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:161) 11-19 13:56:13.339 :E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:664) 11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.harmony.xnet.provider.jsse .OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474) 11-19 13:56:13.339:E/FileTransfer(17969):... 10更多11-19 13:56:13.339:E/FileTransfer(17969):引起b y: java.security.cert。CertPathValidatorException:找不到 認證路徑的信任錨點。 11-19 13:56:13.339: E /文件傳輸(17969):在 org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi.engineValidate(PKIXCertPathValidatorSpi.java:207) 11-19 13:56:13.339:E /文件傳輸(17969):at java.security.cert.CertPathValidator.validate(CertPathValidator.java:197) 11-19 13:56:13.339:E/FileTransfer(17969):at org.apache.harmony.xnet.provider .jsse.TrustManagerImpl.checkServerTrusted(TrustManagerImpl.java:156) 11-19 13:56:13.339:E /文件傳輸(17969):...... 13多個

+1

請分享錯誤的日誌... –

回答

4

答案是老科爾多瓦改變科爾多瓦2.2。 0並在代碼中寫入true,一些這樣的

var fileTransfer = new FileTransfer(); 
     fileTransfer.download(
      task_url, 
      fileListDir + fileName, 
     function(entry) { 
      mylog("download complete: " + entry.fullPath); 
     }, 
     function(error) { 
      mylog("download error source " + error.source); 
      mylog("download error target " + error.target); 
      mylog("upload error code" + error.code); 
     }, true); 

這是工作!謝謝西蒙麥克唐納德!

+1

沒問題,樂意幫忙。 –

+1

應該提到的是,這會使證書檢查無效並且不推薦用於生產用途。請參閱:[鏈接](https://github.com/apache/cordova-plugin-file-transfer/blob/master/doc/index.md) - trustAllHosts:可選參數,默認爲false。如果設置爲true,它將接受所有安全證書。這是有用的,因爲Android拒絕自簽名安全證書。不建議用於生產用途。在Android和iOS上支持。 (布爾值) – Redfox

相關問題