我正在创建一个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
。正确的步骤如下所示:
-
获得从
fileChooser
返回的 url 后,从您添加的文件插件调用window.resolveLocalFileSystemURI
,如下所示:window.resolveLocalFileSystemURI(url, function (entry) { readFile(entry); }, function (failmsg) { //handle fail }).
-
使用您获得的
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); }
有关详细信息,请参阅文件插件。