基于jQuery Ajax实现无刷新文件上传

时间:2023-01-27 13:10:08

最近因项目需求更改,需要实现选择文件后即时上传至服务器,然后提交后,加载xls表格内容到jqgrid表格中,文件上传功能实现示例:

前端jsp页面:

<form id="uploadForm" enctype="multipart/form-data">  <!-- 声明文件上传 -->
<input id="file_upload" type="file" name="pic" onchange="fileChange('${base }')"/>  <!-- 定义change事件,选择文件后触发 -->
<input type="hidden" name="modelName" value="famoxuke" /> <!-- 项目需求字段,非必须 -->
<br/><span style="color: red" id="fileTypeError"></span>    <!-- 文件类型错误回显,此处通过前后端两次验证文件类型 -->
</form>

js代码:

function fileChange(base){
$(
"#fileTypeError").html('');
var fileName = $('#file_upload').val();                  //获得文件名称
var fileType = fileName.substr(fileName.length-4,fileName.length);  //截取文件类型,如(.xls)
if(fileType=='.xls' || fileType=='.doc' || fileType=='.pdf'){     //验证文件类型,此处验证也可使用正则
$.ajax({
url: base
+'/actionsupport/upload/uploadFile',          //上传地址
type:
'POST',
cache:
false,  
data:
new FormData($('#uploadForm')[0]),             //表单数据
processData:
false,
contentType:
false,
success:
function(data){
if(data=='fileTypeError'){
$(
"#fileTypeError").html('*上传文件类型错误,支持类型: .xsl .doc .pdf');  //根据后端返回值,回显错误信息
}
$(
"input[name='enclosureCode']").attr('value',data);
}
});
}
else{
$(
"#fileTypeError").html('*上传文件类型错误,支持类型: .xls .doc .pdf');
}
}

后端action代码:

public String uploadFile(@RequestParam("pic")CommonsMultipartFile pic,HttpServletRequest req,HttpServletResponse response,String modelName) throws IOException{
//文件保存代码及业务处理,后台mvc使用springMVC,此时只展示方法参数类型,飘红标记,具体文件保存代码简单,不作赘述.
return xxxxx; }

后记:由于此功能实现input选择后即时上传,所以对于文件类型的限定和判断建议前后端都要做,防止用户错误提交不正确的文件,白白浪费服务器硬盘空间.