简体   繁体   English

无法在'FileReader'上执行'readAsDataURL':对象已经忙于读取Blob

[英]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.

相关问题 未捕获的 DOMException:无法在“FileReader”上执行“readAsDataURL”:该对象已在忙于读取 Blob。(...) - Uncaught DOMException: Failed to execute 'readAsDataURL' on 'FileReader': The object is already busy reading Blobs.(…) FileReader错误:对象已经忙于读取Blob - FileReader error: The object is already busy reading Blobs FileReader JS引发对象正在忙于读取Blob - FileReader JS throws The object is busy reading a blobs 未捕获的 DOMException:无法在“FileReader”上执行“readAsDataURL” - Uncaught DOMException: Failed to execute 'readAsDataURL' on 'FileReader' 未捕获的类型错误:无法在“FileReader”上执行“readAsDataURL”:参数 1 的类型不是“Blob” - Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob' 类型错误:无法在“FileReader”上执行“readAsDataURL”:参数 1 的类型不是“Blob” - TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob' Angular.js:未捕获的TypeError:无法在“ FileReader”上执行“ readAsDataURL”:参数1的类型不是“ Blob” - Angularjs : Uncaught TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob' 有时会:无法在“FileReader”上执行“readAsDataURL”:参数 1 不是“Blob”类型 - Sometimes getting: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob' 将博客转换为 base64:TypeError:无法在“FileReader”上执行“readAsDataURL”:参数 1 不是“Blob”类型 - Converting blog to base64: TypeError: Failed to execute 'readAsDataURL' on 'FileReader': parameter 1 is not of type 'Blob' FileReader 无法读取大斑点 - FileReader fails reading big blobs
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM