2012-11-19 39 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

相关问题