【发布时间】:2020-12-28 19:56:27
【问题描述】:
我想遍历选择上传的文件,获取文件签名并返回文件签名数组。 listOfFileSignatures 数组在 readFirstFourBytes 函数之外是空的。他们是一种使其在全球范围内可访问的方法吗?
var listOfFileSignatures = [];
var totalSize;
var uploadedFiles = document.getElementById("notes").files;
for (file of uploadedFiles) {
var blob = file;
var fileReader = new FileReader();
fileReader.onloadend = function readFirstFourBytes(e) {
var arr = (new Uint8Array(e.target.result)).subarray(0, 4);
var fileSignature = "";
for (var i = 0; i < arr.length; i++) {
fileSignature += arr[i].toString(16);
};
listOfFileSignatures.push(fileSignature);
console.log(listOfFileSignatures); // Array(3) [ "ffd8ffdb", "ffd8ffe0", "47494638" ]
};
fileReader.readAsArrayBuffer(blob);
};
console.log(listOfFileSignatures); // Array []
【问题讨论】:
-
你没有在任何地方声明
listOfFileSignatures。在for循环之前只需添加listOfFileSignatures = []; -
全局声明,只需将
const listOfFileSignatures = []放在for (file...)行之前。 -
@imvain2 我在 for 循环之前有
var listOfFileSignatures = [];。 -
@terrymorse 在前循环之前我已经有一个
listOfFileSignatures,我已经编辑了代码示例。 -
@simanacci,既然你已经声明了它,这意味着问题只是在你的所有
onloadend调用完成之前你的控制台正在运行。这意味着您需要在列表中最后一个文件的 onloadend 中运行使用listOfFileSignatures的回调函数。
标签: javascript arrays fileapi