[英]Failed to execute 'readAsDataURL' on 'FileReader': the object is already busy reading Blobs
I want to upload multiple images. 我想上传多张图片。 When I choose multiple images photoSelected function is called. 当我选择多个图像时,会调用photoSelected函数。 I want to use base64 but it shows this error on console. 我想使用base64,但它在控制台上显示此错误。
PhotoSelected (e){
Let files = e.target.files;
Let reader = new FileReader();
Let file;
For (let i=0; I<files.length ; i++){
file = files [i];
reader.onload = (file) => {
This.product.photo[i] = reader.result;
}
reader.readAsDataURL(file)
}
}
you defined the reader outside the for loop and use the same reader within the loop. 你在for循环之外定义了阅读器,并在循环中使用相同的阅读器。 this results in the reader being busy. 这导致读者忙碌。 You can solve this by creating one reader for each loop in its own scope, using an IIFE. 您可以使用IIFE为每个循环创建一个读取器来解决这个问题。
PhotoSelected (e){
let files = e.target.files;
let reader = new FileReader();
let file;
for (let i=0; I<files.length ; i++){
(function(file) {
var reader = new FileReader();
reader.onload = (file) => {
this.product.photo[i] = reader.result;
}
reader.readAsDataURL(file)
})(files[i]);
}
}
Since you are using let
already and it uses block scope, you could also create a reader each loop using let
. 由于您已经使用let
并且它使用块作用域,您还可以使用let
创建每个循环的阅读器。
PhotoSelected (e){
let files = e.target.files;
let file;
for (let i=0; I<files.length ; i++){
let reader = new FileReader();
file = files [i];
reader.onload = (file) => {
this.product.photo[i] = reader.result;
}
reader.readAsDataURL(file)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.