javascript - 如何使以下 readAsDataURL 返回多个 readAsDataURL?

标签 javascript file

此函数读取从输入字段获取的文件并返回它们的 dataUrls:

readAsDataURL (target) {
  // target => <input type="file" id="file">
  var reader = new FileReader()
  return new Promise(function (resolve, reject) {
    reader.onload = function (event) {
      resolve(event.target.result)
    }
    reader.readAsDataURL(target.files[0])
  })
},

如您所见,该函数仅处理单个文件。我想返回多个文件。我尝试执行 reader.readAsDataURL(target.files) 但出现此错误:'FileReader' 上的'readAsDataURL':参数 1 不是 'Blob' 类型。

如何让函数返回多个dataUrls?

最佳答案

您是否尝试过使用 Promise.all ?您也许可以执行以下操作:

fileToDataURL(file) {
  var reader = new FileReader()
  return new Promise(function (resolve, reject) {
    reader.onload = function (event) {
      resolve(event.target.result)
    }
    reader.readAsDataURL(file)
  })
}  

readAsDataURL (target) {
  // target => <input type="file" id="file">
  var filesArray = Array.prototype.slice.call(target.files)      
  return Promise.all(filesArray.map(fileToDataURL))
}

这基本上与您设置的相同,但为每个创建一个 promise ,仅在所有完成后才将结果返回到数组中。


我忘了你不能把target.files直接当作一个数组,所以需要先转换一下。为此,您可以使用:Array.prototype.slice.call(target.files)

关于javascript - 如何使以下 readAsDataURL 返回多个 readAsDataURL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511563/

相关文章:

javascript - 选择包含数字的第一个元素 - 2014

Linux:按具有相同值的列合并行

c++ - 打开文件时,C 还是 C++?

java - 如何列出所有大于给定参数的文件?

c - 如何在C中读取二进制文件并保存到数组?

javascript - jQuery .data() 和 setAttribute 之间的区别

javascript - 如果找到,则使用不同的值更新嵌套属性,否则添加它

javascript - AngularJS/Restangular routing "Cannot set property ' route' of undefined"

javascript - 需要巴基斯坦 CNIC 和移动格式屏蔽

file - 从子路径中递归删除特定文件的脚本?