无法读取二进制文件(从SD卡)在Apache cordova for Android App



我正在创建一个Apache Cordova应用程序来加载存储在SD卡中的二进制图像并获取字节数组以进行进一步处理。

我尝试使用以下插件:

  • com.megster.cordova.FileChooser (选取文件并返回文件 路径)。
  • cordova-plugin-file (从文件系统读取文件)。

法典:

var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
xhr.responseType = "arraybuffer";
xhr.onload = (function () {
var reader = new FileReader();
reader.onloadend = function (evt) {
};
reader.readAsArrayBuffer(xhr.response);});
xhr.send();

一旦从文件选择器插件返回"url"路径,我就使用以下代码来读取文件。

当我们直接使用带有url的"reader.readAsArrayBuffer"时,它表示它不是"blob"类型。后来我们使用"XMLHttpRequest"读取为"arraybuffer"并通过,然后它正确加载JPEG图像,但无法读取我的二进制文件。请让我们知道我们在读取文件时出错的地方。

从 fileChooser 插件返回的 url 是一个 ContentURL,不能直接应用于FileReader。正确的步骤如下所示:

  1. 获得从fileChooser返回的 url 后,从您添加的文件插件调用window.resolveLocalFileSystemURI,如下所示:

    window.resolveLocalFileSystemURI(url, function (entry) {
        readFile(entry);
    }, function (failmsg) {
        //handle fail
    }).
    
  2. 使用您获得的FileEntry读取文件:

    function readFile(fileEntry) {
        fileEntry.file(function (file) {
            var reader = new FileReader();
            reader.onloadend = function () {
                console.log("Successful file read: " + this.result);
                displayFileData(fileEntry.fullPath + ": " + this.result);
            };
            reader.readAsText(file);
        }, fail);
    }
    

有关详细信息,请参阅文件插件。

最新更新