您的位置:首页 > 编程语言 > Java开发

java 异步上传文件

2016-05-17 23:15 316 查看
我们的java上传文件,需要form同步上传,并且需要设置enctype为multipart/form-data。
如果将form使用ajax异步提交的话,将会报错说enctype不是multipart/form-data类型

但有时候确实又有酱紫的需求,可以实现,需要借助jquery.form.js 插件
插件下载地址为:
http://yun.baidu.com/share/link?shareid=1698628055&uk=2836507213

下面贴出关键性代码

jsp代码为:
<form id= "uploadForm">
<p >指定文件名: <input type="text" name="filename" value= ""/></p >
<p >上传文件: <input type="file" name="file"/></p>
<input type="button" value="上传" onclick="doUpload()" />
</form>

<script>
function doUpload(){
var formData = new FormData($( "#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);
}
});
}
</script>


后台代码不变,和普通form上传代码一样

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
String savePath =request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
String message ="";
try{
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*100);
factory.setRepository(file);

ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List<FileItem> list = upload.parseRequest(request);

//正则匹配,过滤路径取文件名
String regExp = ".+\\\\(.+)$";
Pattern p = Pattern.compile(regExp);

String fileName="";
for(FileItem item : list){
if(item.isFormField()){
String name = item.getFieldName();
String value = item.getString("UTF-8");
System.out.println(name + "=" + value);
}else{
String name = item.getName();
name = name.substring(name.lastIndexOf("\\")+1);
fileName = savePath+"/"+ sdf1.format(new Date()) + "_"+name;
item.write(new File(fileName));
}

}
message = "文件上传成功!";
}catch (Exception e) {
message= "文件上传失败!";
e.printStackTrace();
}


亲测有用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 文件 异步