读取多个文件输入
read multiple file inputs
这是我读取文件输入中的第一个项目的代码,我如何遍历这个输入中的所有项目?
function readFile (uploadControlId) {
if (!window.FileReader)
throw "The browser does not support HTML 5";
var element = document.getElementById(uploadControlId);
var def = new $.Deferred();
var file = element.files[0];
var parts = element.value.split("''");
var fileName = parts[parts.length - 1];
var reader = new FileReader();
reader.onload = function (e) {
if (uploadControlId == 'uploadControlId'){
def.resolve(e.target.result, fileName);
} else {
def.resolve(e.target.result, fileName);
}
};
reader.onerror = function (e) {
def.reject(e.target.error);
};
reader.readAsArrayBuffer(file);
return def.promise();
}
我试过这样做:
angular.forEach(element.files, function (file){
})
但是这不起作用,因为变量'parts'和'fileName'来自变量'element',所以如果我迭代element中的每个文件,它们会得到'undefined' fileName,这意味着它们不会有。txt或。pdf,所以它们是不可读的。
更新:这没有错误,但只有最后一个文件被上传:
function readFile (uploadControlId) {
if (!window.FileReader)
throw "The browser does not support HTML 5";
var def = new $.Deferred();
var element = document.getElementById(uploadControlId);
angular.forEach(element.files, function(file){
var fileName = file.name;
var reader = new FileReader();
reader.onload = function (e) {
def.resolve(e.target.result, fileName);
};
reader.onerror = function (e) {
def.reject(e.target.error);
};
reader.readAsArrayBuffer(file);
});
return def.promise();
}
我的上传功能:
$scope.UploadAttachment = function(){
readFile(uploadControlId).done(function (buffer, fileName) {
// logic to upload to server
}).fail(function (err) {
alert("error in reading file content");
});
};
您是否在输入标签上添加了"multiple"属性?
顺便说一下,如果你把这个指令添加到你的标签中,一个事件将被所有文件触发,你将在你的控制器中处理它。
// Directive
(function(){
var Directive = function(){
return {
restrict: 'A',
scope : {},
link : function(scope, element, attrs){
element.bind('change', function(changeEvent){
scope.$emit('fileReader', changeEvent.target.files);
});
}
}
};
Directive.$inject = [];
app.directive('fileReader', Directive);
})();
// Controller
(function(){
var Controller = function($scope){
// Methods
function fileReader(files){
for(var iFile = 0, fileLen = files.length; iFile < fileLen; iFile = iFile + 1){
var file = files[iFile];
// Do something
}
}
// Events
$scope.$on('fileReader', function(event, files){
fileReader(files);
});
};
Controller.$inject = [
'$scope'
];
app.controller('MainCtrl', Controller);
})();
相关文章:
- 我想在选择输入文件上显示图像
- 触发IE9中的输入文件点击
- 将图像数据设置为输入文件标记
- Asp-mvc剃刀将输入文件的值存储在文本框中
- 选择同一文件时未触发HTML输入文件选择事件
- 从Javascript中的输入文件中获取文件名
- 输入文件和自动提交 - 播放框架 2.
- 将 FormData 对象放入数组中以从不同的输入文件上载文件
- 警报输入“文件”文件名,使用 jQuery 和“split”
- 检查是否对任何输入文件进行了更改
- 仅获取所选输入文件的名称
- 如何在Joomla模块中通过JavaScript发送输入文件类型
- Javascript将输入文件传递给PHP
- 触发AngularJS中的输入文件点击事件
- 输入文件:如何在刷新后显示文件名
- Angular 2-模型驱动的表单,带有输入文件(文件上传)
- 如何制作一个输入文件以供使用
- 将html输入文件元素从一个表单复制到另一个表单
- 如何在jquery中清除输入文件字段
- 在3个输入文件中加载img