我在使用apache cordova的“文件”插件在iOS(或Android)设备上本地存储文件时遇到问题。我认为问题是正确设置路径。
这是我从Xcode获得的错误消息 无法创建保存下载文件的路径:操作无法完成。 (可可错误512。)
以下是我尝试在本地保存文件的代码:
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
document.addEventListener("deviceready", onDeviceReady, false);
var root;
function onDeviceReady(){
// Note: The file system has been prefixed as of Google Chrome 12:
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onInitFs, errorHandler);
}
function onInitFs(fs) {
var fileURL = "cdvfile://localhost/persistant/file.png";
var fileTransfer = new FileTransfer();
var uri = encodeURI("http://upload.wikimedia.org/wikipedia/commons/6/64/Gnu_meditate_levitate.png");
fileTransfer.download(
uri,
fileURL,
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=="
}
}
);
}
function errorHandler(e) {
var msg = '';
switch (e.code) {
case FileError.QUOTA_EXCEEDED_ERR:
msg = 'QUOTA_EXCEEDED_ERR';
break;
case FileError.NOT_FOUND_ERR:
msg = 'NOT_FOUND_ERR';
break;
case FileError.SECURITY_ERR:
msg = 'SECURITY_ERR';
break;
case FileError.INVALID_MODIFICATION_ERR:
msg = 'INVALID_MODIFICATION_ERR';
break;
case FileError.INVALID_STATE_ERR:
msg = 'INVALID_STATE_ERR';
break;
default:
msg = 'Unknown Error';
break;
};
alert('Error: ' + msg);
}
</script>
答案 0 :(得分:14)
您的文件路径包含拼写错误(或语法错误):
var fileURL =“cdvfile://localhost/persistant/file.png”;
您应该将其写为持久性。
正确的代码:
var fileURL = "cdvfile://localhost/persistent/file.png";
答案 1 :(得分:0)
查看以下链接:
http://cordova.apache.org/docs/en/3.4.0/cordova_plugins_pluginapis.md.html#Plugin%20APIs https://github.com/apache/cordova-plugin-file/blob/dev/doc/index.md
http://cordova.apache.org/docs/en/3.0.0/cordova_file_file.md.html#File
第一个和第二个链接为您提供有关插件文件及其安装方式的信息。
第三个展示了如何使用File插件。
每当您需要使用Cordova执行某些操作时,请检查插件是否可用:)
问候。
答案 2 :(得分:0)
到目前为止,我只在Android上对此进行了测试,但我相信它应该按原样运行,或者对IOS进行少量修改:
var url = 'example.com/foo'
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
fileSystem.root.getFile('foo_file', {create: true, exclusive: false},
function(file_entry){
var ft = new FileTransfer()
ft.download(url, file_entry.toURL(), function(fe){
fe.file(function(f){
reader = new FileReader()
reader.onloadend = function(ev){
console.log('READ!', ev.target.result)
}
reader.readAsText(f)
})
})
}
)
})
请注意,我还需要文件的内容,因此如果您在下载时不需要内容,则可以省略末尾的位。
另请注意,使用window.saveAs的方法要简单得多,但只能在Android 4.4中使用。