Chrome应用持久性文件系统存储不可靠

时间:2013-10-04 09:50:11

标签: google-chrome-app html5-filesystem

我的谷歌浏览器应用和文件存储存在问题。

该应用程序在线运行并收集要脱机存储的文件,以便以后能够脱机正常运行。它大部分都是这样做但有时但很少在计算机重启或重新启动浏览器之后它似乎缺少文件系统中的文件......

我想我的问题是,我如何确保持久存储保持持久性?

修改

代码

请求文件系统

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(
window.PERSISTENT, 200*1024*1024,
    function(filesystem) {
        directory.fs = filesystem;
        //Start Application
    },
    filesystemerrorHandler
);

将文件从远程文件系统保存到本地文件系统

var xhr = new XMLHttpRequest();
xhr.open('GET', fileurl, true);
xhr.responseType = 'blob';
xhr.send();
xhr.onload = function(e) {
    if (this.status == 200) {
        var blob = new Blob([this.response], {type: blobtype});
        directory.fs.root.getFile(name, {create: true}, function(fileEntry) {
            fileEntry.createWriter(function(writer) {
                writer.onwrite = function(e) {};
                writer.onerror = function(e) { console.log("error"); console.log(e); };
                var blob = new Blob([xhr.response], {type: blobtype});
                writer.write(blob);
                var url = fileEntry.toURL();
                if ( typeof(callback) == 'function' ) {
                    //Save url to indexeddb for recall later
                    //Returns format of: filesystem:chrome-extension://nlipipdnicabdffnohdhhliiajoonmgm/persistent/xxxxxxxxxxxx.png
                    callback(url);    
                }
            }, filewriteerrorHandler2);
        }, filewriteerrorHandler);
    }
    else {
        if ( typeof(callback) == 'function' ) callback(false);
    }
};

回顾下载的文件示例

<img src="filesystem:chrome-extension://nlipipdnicabdffnohdhhliiajoonmgm/persistent/xxxxxxxxxxxx.png">

现在大部分都可行。但是,有时,如果计算机已重新启动或浏览器重新启动。如果我再次使用该应用程序,图片将无法显示,这给我的印象是文件系统已被清除此应用程序。

我应该采取哪些措施或哪些方面来防止这种情况发生?

感谢。

1 个答案:

答案 0 :(得分:0)

增加分配给应用程序的字节数。 我存储的内容比我分配的要多。

window.requestFileSystem  = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(
    window.PERSISTENT, 200*1024*1024,    <====
    function(filesystem) {
        directory.fs = filesystem;
        //Start Application
    },
    filesystemerrorHandler
);