gpt4 book ai didi

javascript - 在 javascript 中读取文件太快?

转载 作者:行者123 更新时间:2023-11-29 20:05:24 25 4
gpt4 key购买 nike

我有以下代码:

oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;
oFReader.onload = function (oFREvent) {
$("#preview").append("<img src='" + oFREvent.target.result + "' />");
};

function loadImageFile() {
if (document.getElementById("uploadImage").files.length === 0) { return; }

$.each(document.getElementById("uploadImage").files, function (index, value) {
if (!rFilter.test(value.type)) { alert("You must select a valid image file!"); return; }
oFReader.readAsDataURL(value);
});
}

它的目的是获取已拖动到类型文件输入上的图像集合,然后在 div 中预览这些图像。我的问题是,当我运行它时,只出现最后一张图片。如果我在我的 javascript 中添加断点并单步执行代码,则会显示两个图像。

我假设这是因为 oFReader.onload 被快速调用了两次。我考虑过使用 setTimeout 或可能在我的循环内声明 oFReader 来避免冲突,但我想知道是否有更优雅的解决方案?

最佳答案

您正在阅读的每个文件都需要一个单独的 FileReader 对象。

.readDataAsURL() 是一种异步方法。它会在您调用它一段时间后完成。在您的 .each() 循环中,您试图在前一个文件完成之前读取一个新文件,从而在它完成之前停止它。

你可以这样做:

function loadImageFile() {
if (document.getElementById("uploadImage").files.length === 0) { return; }

$.each(document.getElementById("uploadImage").files, function (index, value) {
var oFReader = new FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i;

if (!rFilter.test(value.type)) { alert("You must select a valid image file!"); return; }
oFReader.onload = function (oFREvent) {
$("#preview").append("<img src='" + oFREvent.target.result + "' />");
};
oFReader.readAsDataURL(value);
});
}

关于javascript - 在 javascript 中读取文件太快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12188852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com