HTML5 FormData提交表单-HTML5文件上传-JavaServlet处理文件上传

来源:互联网 发布:美发教程软件下载 编辑:程序博客网 时间:2024/06/11 14:44

记录一下,供大家参考供自己备用,

原生开发爱好,框架什么的都是浮云!

index.html : 测试环境 google chrome

<!DOCTYPE html><html><head><meta charset="utf-8"><title>标题</title></head><body><input type = 'text' id="normal_stream" value="中文乱码不?" /><input type = 'file' id="binary_stream" accept = "image/jpg" multiple="multiple" /><input type = 'button' value="SUBMIT" onclick="save()" /><div id="show"></div><script>//console.log(JSON.parse('{"a":"123"}'));function save(){var normal_stream = document.getElementById("normal_stream").value;var files = document.getElementById("binary_stream").files;var arg={url : 'test.action',data:{normalStream:normal_stream},progress:function(e){//展示进度条 e.loaded/e.total;console.log(e.loaded/e.total);},fail:function(e){//失败处理console.log("fail:"+e);},success:function(json){//成功处理console.log(json);document.getElementById("show").innerHTML=json.normal+"本地文件名: "+json.fileName;}};for(var i=0;i<files.length;i++)arg.data["file-"+i] = files[i];upload(arg);}function upload(arg){var form = new FormData();for(var key in arg.data)form.append(key+"",arg.data[key]);xhr = new XMLHttpRequest();xhr.open("POST", arg.url, true);xhr.upload.onprogress = arg.progress;xhr.onreadystatechange=function(){if(xhr.readyState==4){if(xhr.status>=200&&xhr.status<300){//console.log(xhr.responseText);arg.success&&arg.success(JSON.parse(xhr.responseText));}else arg.fail&&arg.fail(xhr.status);}}xhr.send(form);}</script></body></html>

Myservlet.java:测试环境 Tomcat8

package com.test;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Collection;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet("/test.action")@MultipartConfigpublic class MyServlet extends HttpServlet {private static final long serialVersionUID = 1L;    public MyServlet() {        super();    }protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/plain;charset=utf-8");String normalStream = new String (request.getParameter("normalStream").getBytes("ISO8859-1"),"UTF-8"); //二进制流上传需要转码normalStream = org.apache.commons.lang.StringEscapeUtils.escapeHtml(normalStream);//字符实体化 依赖commons-lang-2.6.jarString echoFileName="";File file=null;String path = getServletContext().getRealPath(".")+File.separator+"upload"+File.separator;//获取网络路径file = new File(path);if(!file.exists())file.mkdirs();Collection<Part> parts = request.getParts(); //谨防多文件上传System.out.println(parts.size());String fileName;InputStream fin = null;OutputStream fout = null;for(Part p : parts){fileName = p.getSubmittedFileName();//获取客户端文件名 , 就用这个文件名if(null == fileName)continue;echoFileName+=(echoFileName.isEmpty()?fileName:","+fileName);fin = p.getInputStream();file = new File(path+fileName);if(!file.exists())file.createNewFile();fout = new FileOutputStream(file);int x;while((x = fin.read())!=-1) fout.write(x);fout.flush();fin.close();fout.close();}response.getWriter().append("{\"normal\":\""+normalStream+"\",\"fileName\":\""+echoFileName+"\"}");response.getWriter().flush();}}











0 0
原创粉丝点击