2

我正在使用 cordova-plugin-file 通过 readAsArrayBuffer 方法读取我的 mp3 文件。它适用于小于 20mb 的文件,但对于较大的文件,它会导致应用程序因此错误而崩溃。(我正在使用人行横道浏览器)

E/chromium( 3330): [ERROR:simple_index_file.cc(223)] Failed to write the temporary index file E/chromium( 3330): [ERROR:runtime_javascript_dialog_manager.cc(69)] Not implemented reached in virtual void xwalk::RuntimeJavaScriptDialogManager::ResetDialogState(content::WebContents*)

我很困惑问题是什么。问题是来自xwalk 还是cordova-plugin-file?请帮助我,因为这个插件只能读取小于 20mb 的文件。

4

1 回答 1

1

我找到了这个错误的解决方案。我认为Cordova-plugin-file无法将大量数据从本机发送到 javascript。所以我尝试从 Crosswalk Browser API 进行研究,很高兴看到它们支持File APIvirtual root它可以通过类似 : EXTERNAL, CACHEDIR, , ...直接访问 Android 文件系统DOWNLOADS。这是使用 Crosswalk 读取任何大文件的技巧:

function readFileAsArrayBuffer(storage, path, file) {
    xwalk.experimental.native_file_system.requestNativeFileSystem(storage,
    function (fs) {
       fs.root.getFile(storage + "/" + path + file, {create: false}, function (entry) {
           entry.file(function (file) {
                reader = new FileReader();
                reader.onloadend = function (data) {
                   //Data after read.
                };
                  reader.readAsArrayBuffer(file);
                },
            },
            function (e) {
              console.error("2-" + JSON.stringify(e))
            });
        },
        function (e) {
          console.error("3-" + JSON.stringify(e));
        });
}
//test
readFileAsArrayBuffer("EXTERNAL", "downloads/folder/", "file.mp3");
于 2015-10-26T16:00:09.830 回答