Javascript 使用FileReader和readAsArrayBuffer读取多个文件
我正在尝试读取多个文件并将其添加到一个数组中。我已经发现readAsArrayBuffer是一个异步函数,所以我需要等待以前的上传结束。我试图使用回调,但失败了Javascript 使用FileReader和readAsArrayBuffer读取多个文件,javascript,asynchronous,file-upload,callback,Javascript,Asynchronous,File Upload,Callback,我正在尝试读取多个文件并将其添加到一个数组中。我已经发现readAsArrayBuffer是一个异步函数,所以我需要等待以前的上传结束。我试图使用回调,但失败了 以下是js文件: var fileList=[]; $(文档).ready(函数(){ 函数addFiles(文件){ 对于(var i=0;i
以下是js文件:
var fileList=[];
$(文档).ready(函数(){
函数addFiles(文件){
对于(var i=0;i
因此,现在我在每次迭代中都有了新的FileReader,我摆脱了对“FileReader”执行“readAsArrayBuffer”失败的:对象已经在忙于读取blob
错误,现在我的数组中有了相同的文件,尽管我选择了不同的
在
+file.name
处有语法错误,在.ready()
处缺少)
,定义参数并将读取器传递给IIFE
var fileList=[];
$(文档).ready(函数(){
函数addFiles(文件){
对于(var i=0;i
您的问题是阅读器将被关闭-使用。forEach将意味着每个迭代在其自身的关闭中都是安全的-也不需要IILife kludges
function addFiles(files) {
// files is not a regular Array
[].forEach.call(files, function(file) {
var reader = new FileReader();
reader.onloadend = function() {
fileList.push(reader.result);
$('#upload-list').append('<div class="upload-list-item">' + file.name + '</div>');
}
reader.readAsArrayBuffer(file);
});
}
这将保证调用$(“#上载列表”).append
的顺序是fileList.push(reader.result)代码>。。。问题是阅读器将是什么(您使用iLife修复了文件
,但没有使用阅读器
@JaromandaX您建议在应答中包含将阅读器
传递给iLife的代码吗?一点也不。forEach将修复此问题,而不必求助于async/Wait等新的和过度使用的玩具,因为它们会破坏旧浏览器的兼容性,同时也没有任何好处。)all@JaromandaX不会的ld可能只将FileReader
的一个实例定义为well@JaromandaX一直想知道:p是什么意思。我没有任何和所有的循环。这是一个“舌头挂出来”的笑脸(笑脸是一个纯文本表情符号-不确定你是否需要这个解释:p)forEach对我有用,谢谢!除了我放置了reader.readAsArrayBuffer(文件)我想,我了解生活中的事情。
function addFiles(files) {
return Promise.all([].map.call(files, function (file) {
return new Promise(function (resolve, reject) {
var reader = new FileReader();
reader.onloadend = function () {
resolve({ result: reader.result, file: file });
};
reader.readAsArrayBuffer(file);
});
})).then(function (results) {
results.forEach(function (result) {
$('#upload-list').append('<div class="upload-list-item">' + result.file.name + '</div>');
});
return results;
});
}