使用 Cordova 文件插件创建文件时返回 INVALID_MODIFICATION_ERR

Posted

技术标签:

【中文标题】使用 Cordova 文件插件创建文件时返回 INVALID_MODIFICATION_ERR【英文标题】:INVALID_MODIFICATION_ERR return when using Cordova file plugin create file 【发布时间】:2015-11-12 04:35:01 【问题描述】:

android5.1、Nexus 10上使用Cordova文件插件1.3.3版创建和写入文件,

    按照指南 https://github.com/apache/cordova-plugin-file,并匹配此链接上的要求。 向清单添加权限:android.permission.WRITE_EXTERNAL_STORAGE requestFileSystem接口返回的文件夹为“file:///storage/emulated/0/”,我们可以访问。

    尝试了两个选项,得到相同的错误:

    preference name="AndroidPersistentFileLocation" value="Internal"

    preference name="AndroidPersistentFileLocation" value="Compatibility"

示例代码:

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););

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

所以这个插件需要的任何其他配置都可以在 Android 5.1 上运行?

顺便说一句,代码在 iPad 上正常工作。

【问题讨论】:

您找到解决方案了吗?我也有同样的问题。 确保你没有这样的特殊字符,在创建路径时会产生问题,如'/' 【参考方案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

【讨论】:

【参考方案2】:

确保存储应用权限启用。 当应用程序尝试请求不存在文件系统时抛出INVALID_MODIFICATION_ERR

【讨论】:

以上是关于使用 Cordova 文件插件创建文件时返回 INVALID_MODIFICATION_ERR的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Cordova 文件传输插件上传到 SAP Content Server

Cordova 后退按钮在使用自己的插件后销毁 CordovaActivity

带有 xcode 5.1 的 cordova 3.4 不会使用最新的文件传输插件构建

使用cordova文件插件时如何从iOS导出文件?

使用cordova媒体插件录制音频会导致空文件

Cordova 插件和依赖项