【问题标题】:How do you store a file locally using Apache Cordova 3.4.0如何使用 Apache Cordova 3.4.0 在本地存储文件
【发布时间】:2014-04-15 16:36:43
【问题描述】:

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

【问题讨论】:

    标签: android ios cordova file-transfer


    【解决方案1】:

    查看这些链接:

    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

    第一个和第二个链接为您提供有关插件文件以及如何安装它的信息。

    第三个告诉你如何使用文件插件。

    每当您需要使用 Cordova 做某事时,请检查是否有可用的插件:)

    问候。

    【讨论】:

    • 谢谢你的链接,我已经安装了插件,它的功能已经完成了 90%...(它能够调用本地文件系统 CDVFile)并尝试将文件保存到磁盘,但我创建 var fileURL 的行似乎不正确... Xcode 抛出以下错误:文件传输错误:无法创建保存下载文件的路径:操作无法完成。 (可可错误 512。)
    • 您确定要保存文件的路径正确吗?
    • 尽我所能......它是沙箱中我要保存文件的目录......但它不起作用......
    • 您是否按照文档中的说明设置了配置?
    • @Nathan 你是怎么做到的?我可以用Android下载没问题,但我在iOS上得到了你提到的错误。在 Android 上,我的路径是 file:///storage/sdcard0/Android/data/com.my.app/cache/image.png 而在 iOS 上是 file:///var/mobile/Applications//Documents/图像.png
    【解决方案2】:

    您的文件路径包含拼写错误(或语法错误):

    var fileURL = "cdvfile://localhost/persistant/file.png";

    你应该把它写成persistent

    正确代码:

    var fileURL = "cdvfile://localhost/persistent/file.png";
    

    【讨论】:

    • @ar34z: 你能告诉我如何在 ionic 中访问这个文件吗:file:///storage/emulated/0/SmaartMedia/jellyfish.jpg 它的显示是不允许的
    【解决方案3】:

    到目前为止,我只在 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 中可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多