如何使用Apache Cordova 3.4.0在本地存储文件

时间:2014-03-11 20:50:43

标签: android ios cordova file-transfer

我在使用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>

3 个答案:

答案 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中使用。