我们的java上传文件,需要form同步上传,并且需要设置enctype为multipart/form-data。
如果将form使用ajax异步提交的话,将会报错说enctype不是multipart/form-data类型
但有时候确实又有酱紫的需求,可以实现,需要借助jquery.form.js 插件
插件下载地址为:
下面贴出关键性代码
jsp代码为:
指定文件名:
上传文件:
functiondoUpload(){
varformData=newFormData($("#uploadForm")[0]);
$.ajax({
url:'${pageContext.request.contextPath}/UploadHandleServlet',
type:'POST',
data:formData,
async:false,
cache:false,
contentType:false,
processData:false,
success:function(returndata){
alert(returndata);
},
error:function(returndata){
alert(returndata);
}
});
}
后台代码不变,和普通form上传代码一样
SimpleDateFormatsdf1=newSimpleDateFormat("yyyyMMddHHmmss");
StringsavePath=request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
Filefile=newFile(savePath);
if(!file.exists()){
file.mkdir();
}
Stringmessage="";
try{
DiskFileItemFactoryfactory=newDiskFileItemFactory();
factory.setSizeThreshold(1024*100);
factory.setRepository(file);
ServletFileUploadupload=newServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
Listlist=upload.parseRequest(request);
//正则匹配,过滤路径取文件名
StringregExp=".+\\\\(.+)$";
Patternp=pile(regExp);
StringfileName="";
for(FileItemitem:list){
if(item.isFormField()){
Stringname=item.getFieldName();
Stringvalue=item.getString("UTF-8");
System.out.println(name+"="+value);
}else{
Stringname=item.getName();
name=name.substring(name.lastIndexOf("\\")+1);
fileName=savePath+"/"+sdf1.format(newDate())+"_"+name;
item.write(newFile(fileName));
}
}
message="文件上传成功!";
}catch(Exceptione){
message="文件上传失败!";
e.printStackTrace();
}
亲测有用