使用Cordova文件插件创建文件

时间:2015-08-19 03:20:41

标签: android cordova

使用Cordova文件插件版本1.3.3在Android5.1,Nexus 10上创建和编写文件,

  1. 按照指南https://github.com/apache/cordova-plugin-file进行操作,并匹配此链接所需的内容。
  2. 添加对清单的权限:android.permission.WRITE_EXTERNAL_STORAGE
  3. requestFileSystem接口返回的文件夹是“file:/// storage / emulated / 0 /”,我们可以访问。
  4. 尝试了两个选项,得到了同样的错误:

    首选项名称=“AndroidPersistentFileLocation”值=“内部”

    首选项名称=“AndroidPersistentFileLocation”value =“兼容性”

  5. 示例代码:

    var fileInfo = new Object();
    fileInfo.createFile = true;
    fileInfo.filename = "test.txt";
    fileInfo.content = "test";
    fileInfo.success = function(){alert("file Info success");};
    fileInfo.error = function() {alert("file Info error");};
    
    _write0 = function() {
        if(fileInfo.createFile) {
            var _write1 = function(downloadFolder) {
                theFileSystem.root.getFile(downloadFolder+"/"+fileInfo.filename,{create:true},function(f){
                    f.createWriter(function(writer){
                        var _write2 = function() {
                            writer.onwriteend = function(evt) {
                                fileInfo.success();
                            };
                            var raw = atob(fileInfo.content);
                            var rawLength = raw.length;
                            var contentArray = new Uint8Array(new ArrayBuffer(rawLength));
                            for(var i=0;i<rawLength;i++) {
                                contentArray[i] = raw.charCodeAt(i);
                            }
                            var contentBlob = new Blob([contentArray.buffer]);
                            writer.write(contentBlob);
                        };
    
                        writer.onwriteend = function(evt){_write2();};
                        writer.onerror = function(evt){fileInfo.error();};
                        writer.truncate(0);
                    });
                }, function(data){alert("Create File failed."); alert(data);});
            };
    
            _write1("File/myApp");
        }
    };
    
    requestFileSystem(PERSISTENT,1024*1024,function(fs){
        theFileSystem = fs;
        _write0();
    },function(data){alert("requestFileSystem failed."); alert(data);});
    

    错误INVALID_MODIFICATION_ERR(9)在执行接口DirectoryEntry.prototype.getFile时抛出。

    因此,此插件所需的任何其他配置都适用于Android 5.1?

    BTW,代码在iPad上正常运行。

2 个答案:

答案 0 :(得分:1)

此解决方案对我有用。 将配置文件编辑为此:

<platform name="android">
  <edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application">
   <application android:usesCleartextTraffic="true" android:requestLegacyExternalStorage="true"/>
  </edit-config>
</plataform>

找到的解决方案here

答案 1 :(得分:0)

确保应用权限中的存储 已启用。 当应用尝试请求不存在的文件系统时,会抛出INVALID_MODIFICATION_ERR