最近在做Struts文件上传的过程中遇到了一些问题,具体如下:
需求:上传文件,页面显示上传的文件列表
注:我们用的是公共组件,上传文件后,fileid会拼起来保存到页面上,1.为了页面显示;2.fileid串要传到其他页面
改动之前的js和html代码(部分):
//js部分 function addfile(){ //fileids域放的是已上传的文件id串 document.getElementById("fileids").value = fileid + ";" + document.getElementById("fileids").value; var fileone = document.getElementById("fileOne").value; if(fileone == ''){ alert('<bean:message key="excel.null.item"/>'); return; }else{ var str=fileone.indexOf('.'); if(str==-1){ alter('文件格式不对!'); return ; }else{ //这里用于校验文件格式是否正确 var profix=fileone.substring(str); if(profix=='.exe'){ alert('不能上传扩展名为.exe的文件!'); return ; } } } } //html部分 <input name="fileOne" id="fileurl" type="file" size="50" onchange="javascript:addfile()">
配置文件配置的可上传文件的最大值:
<controller maxFileSize="8M"/>
实现的效果如下图1:
现在的情况:
A:先上传正常的文件:
B:再上传大于8M的文件,结果如下图:
原因参看文章:http://www.iteye.com/topic/113607
解决方案:在 addfile()方法中通过ajax方式先行校验文件的大小是否合适,如果不合适,alert即可,这样避免了直接提交时,造成的问题(如图2,图3) .
//js部分 function addfile(){ document.getElementById("fileids").value = fileid + ";" + document.getElementById("fileids").value; var fileone = document.getElementById("fileOne").value; if(fileone == ''){ alert('<bean:message key="excel.null.item"/>'); return; }else{ var str=fileone.indexOf('.'); if(str==-1){ alter('文件格式不对!'); return ; }else{ var profix=fileone.substring(str); if(profix=='.exe'){ alert('不能上传扩展名为.exe的文件!'); return ; } } } var result; //校验文件大小是否大于8M buffalo.remoteCall2("uploadfileAction.do", "checkfilesize", [fileone], function(reply){ result = reply.getResult(); if(result=='false'){//大于8M时 var obj = document.getElementById("fileurl"); obj.outerHTML = obj.outerHTML; obj.value=""; alert("上传文件不能大于4M!"); return ; }else{//小于等于8M时 document.forms[0].submit();//提交 } }); } //html部分 <input name="fileOne" id="fileurl" type="file" size="50" onchange="javascript:addfile()">