https://blog.csdn.net/jufeng9318/article/details/51899435
http://www.cnblogs.com/laozuan/p/4660405.html
谷歌浏览器,file input出于安全角度,用户异步上传完毕文件后选择相同文件时,不会触发change,因为在这种情况下,我们没有办法使value(也就是文件路径)发生变化。
解决方法是,每次选完文件,就重建此元素,这样值自然是空的,因为clone不带值,这样就是一个全新的file input,每一次选择,自然各种正常。
HTML代码
<!--附件上传-->
<div class="view-item file-list-view">
<div class="text-title">
<span class="font-16">附件上传
<i class="eg eg-circle-add font-12 pointer" οnclick="openFileInput();">
<input id="orgfileUpload" type="file" accept="application/msword,application/x-ppt,application/x-xls,application/pdf,text/plain" style="display: none;" οnchange="angular.element(this).scope().getFile()"/>
</i>
</span>
</div>
<div class="file-list font-14">
<div class="list-item" ng-repeat="attachment in affairsNoticeInfo.affairsNoticeAttachment">
<span><i class="eg eg-link"></i>{{attachment.attcFileName}}.{{attachment.attcContentType}}<i class="eg eg-circle-remove pointer" ng-click="deleteAttachment(attachment,$index);"></i></span></div>
</div>
</div>
JS代码
/*附件上传*/
$scope.getFile = function(){
var file = $("#orgfileUpload")[0].files[0];
if(file.size > 0){
$scope.uploadFile(file);
};
};
$scope.uploadFile = function(file){
var form = new FormData();
form.append('upfile', file);
$http({
method: 'POST',
url: api_prefix+'/notice/attachment/fileUpload',
data: form,
headers: {'Content-Type': undefined},
transformRequest: angular.identity
}).success(function (data) {
if(data.exchangeStatus == 1){
/*解决谷歌浏览器重复上传相同文件不触发change事件的问题*/
var file = $("#orgfileUpload").val("");
layer.msg('上传成功!', {
});
$scope.affairsNoticeInfo.affairsNoticeAttachment.push(data.data);
}else if (data.exchangeStatus == 0){
layer.msg('后台服务器运行超时!', {
});
}
}).error(function(data, status, headers, config){
if(status == 401){
layer.msg('验证码错误!', {
});
}else{
layer.msg('服务器错误!', {
});
}
});
}
function openFileInput(){
$("#orgfileUpload")[0].click();
};