我正在使用HTML5文件API来读取二进制文件。用户可以选择多个文件,然后单击按钮将它们复制到JavaScript对象中。我的代码列在这里:
<script>
var data = new Object;
function ReadFiles()
{
var files = document.getElementById('file').files;
for (var i = 0; i < files.length; i++) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
data["File_Content" + i] = btoa(evt.target.result);
}
};
reader.readAsBinaryString(files[i]);
}
}
</script>
<input type="file" id="file" name="file[]" multiple />
<button onclick="ReadFiles();">Read Files</button>
如果用户输入三个文件,则只有无效的属性“File_Content3”将被添加到带有值的“data”对象中;其他三个有效属性'File_Content0','File_Content1'和'File_Content2'未创建。
有人能解决问题吗?感谢。
答案 0 :(得分:11)
你有i
变量的clouse问题,我只是使用另一个变量
var j = 0, k = files.length;
for (var i = 0; i < k; i++) {
var reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
data["File_Content" + j] = btoa(evt.target.result);
j++;
if (j == k){
alert('All files read');
}
}
};
reader.readAsBinaryString(files[i]);
}