我正在使用cordova 3.1创建我的第一个web应用程序。
在这个应用程序中,我需要能够将文件下载到手机然后打开它,但我似乎无法通过如何下载文件。
我正在使用cordovas doc页面中的文件传输代码。 Everyting随CLI安装。
这是我走了多远:
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
download();
}
function download(){
var filePath = '/mnt/sdcard';
var fileTransfer = new FileTransfer();
var uri = encodeURI("https://www.dropbox.com/s/27bxw65u4ga5is0/test.pdf");
fileTransfer.download(
uri,
filePath,
function(entry) {
console.log("download complete: " + entry.fullPath);
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
},
false,
{
headers: {
"Authorization": "Basic dGVzdHVzZXJuYW1lOnRlc3RwYXNzd29yZA=="
}
}
);
}
config.xml
<access origin="*" />
<feature name="File">
<param name="android-package" value="org.apache.cordova.file.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
</feature>
和我的清单
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
我得到的错误
E/FileTransfer(878): {"target":"\/sdcard\/test.pdf","source":"https:\/\/www.dropbox.com\/s\/27bxw65u4ga5is0\/tes t.pdf","http_status":0,"code":1}
E/FileTransfer(878): java.io.FileNotFoundException:/sdcard/test.pdf: open failed: EACCES (Permission denied)
E/FileTransfer(878): at libcore.io.IoBridge.open(IoBridge.java:416) E/FileTransfer(878): at java.io.FileOutputStream.<init>(FileOutputStream.java:88)
E/FileTransfer(878): at org.apache.cordova.CordovaResourceApi.openOutputStream(CordovaResourceApi.java:290)
E/FileTransfer(878): at org.apache.cordova.CordovaResourceApi.openOutputStream(CordovaResourceApi.java:271)
E/FileTransfer(878): at org.apache.cordova.filetransfer.FileTransfer$4.run(FileTransfer.java:711)
我花了差不多2天时间试图解决这个问题而没有成功。
答案 0 :(得分:7)
不确定3.1,但对于最新版本的Cordova(3.3 +),较新的(1.0.0+)版本的File使用文件系统URL而不是文件路径。像这样:
cdvfile://localhost/persistent/path/to/file
答案 1 :(得分:4)
cordova 3.3.0 cordova-plugin-file-transfer r 0.4.2 cordova-plugin-file r 1.0.1
在真实设备上测试,适用于Android和iOS
我的代码:
fileTransfer.download(
"http://my.domain.com/data/sashaTest.txt",
fileSystem.root.toURL() + "sashaTest.txt", // the key factor !!!
function(theFile) {
alert("download complete: " + theFile.toURL());
console.log("download complete: " + theFile.toURL());
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code: " + error.code);
},
true
);
目标设置为:fileSystem.root.toURL()+“sashaTest.txt”,
取得了不同。
答案 2 :(得分:3)
是的,fileSystem.root。 toURL()是那里的新玩家,可以让你使用最新的Cordova cdvfile:// url系统。
太糟糕了,他们并没有就此立即发出一般性通知。它出现在a resolved issue's comments中,后来在其GIT回购as dsims mentioned earlier中记录在文档中。
一旦toURL()事情清楚,下载样本就像Phonegap / Cordova docs状态一样有意义并且可以解决。
答案 3 :(得分:0)
同时添加互联网权限
<uses-permission android:name="android.permission.INTERNET" />
答案 4 :(得分:0)
注意:该内容最初是由OP修改为问题的。我已将其移至答案以符合网站指南。
删除了Cordova 3.1,并手动安装了2.7.0,使其正常工作。