package com.upload; /** * 自定义文件上传监听器 */ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.ProgressListener; public class MyProcessLister implements ProgressListener{ HttpSession session; public MyProcessLister(HttpServletRequest request) { session = request.getSession(); session.setAttribute("status", 0); session.setAttribute("times", 1); } @Override public void update(long read, long total, int times) { int precent = (int) (read*100/total); session.setAttribute("status", precent); session.setAttribute("times", times); } }
package com.upload; /** * 刷新进度 */ import java.io.IOException; import java.io.PrintWriter; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONObject; @SuppressWarnings("serial") @WebServlet("/upload/process") public class RefreshProcess extends HttpServlet { public void doPost(HttpServletRequest request ,HttpServletResponse response) throws IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Type", "text/html;charset=utf-8"); PrintWriter out = response.getWriter(); HttpSession session = request.getSession(); if (null == session.getAttribute("status")) { session.setAttribute("status", 0); session.setAttribute("times", 1); } JSONObject json = new JSONObject(); json.put("status", session.getAttribute("status")); json.put("times", session.getAttribute("times")); out.print(json); out.close(); } }
package com.upload; /*** * 文件上传
<script type="text/javascript" src="${path}/js/jquery.js" ></script> <script type="text/javascript" src="${path}/js/bootstrap.min.js" ></script> <script type="text/javascript"> $("#bt").click(function(){ tForm(); // 提交表单 setInterval(procesfun,1000); // 定时任务 }); // 提交form表单 function tForm(){ var form = new FormData(document.getElementById("tf")); $.ajax({ url:"${path}/servlet/UploadServlet", type:"post", data:form, processData:false, contentType:false, success:function(data){ console.log(data); }, error:function(e){ $("#result").html("用户取消了上传操作").css("color","red"); } }); }; // 定时请求上传进度 function procesfun(){ $.ajax({ type:"post", url:"${path}/upload/process", success:function(data){ var obj = eval('(' + data + ')'); if ("1" == obj.times){ $("#result").html("身份证正面正在上传,上传进度为:"+obj.status+"%,请耐心等待。").css("color","red"); } if ("2" == obj.times){ $("#result").html("身份证反面正在上传,上传进度为:"+obj.status+"%,请耐心等待。").css("color","red"); } if ("3" == obj.times){ $("#result").html("手持身份证正在上传,上传进度为:"+obj.status+"%,请耐心等待。").css("color","red"); if("100" == obj.status){ $("#result").html("文件上传成功。").css("color","red"); window.setTimeout("window.location='${path}/uploadSuccess.jsp'",2000); } } }, error:function(){ $("#result").html("用户取消了上传操作").css("color","red"); } }) } function checkFile(){ var zm = document.getElementById("zm").value; var fm = document.getElementById("fm").value; var sc = document.getElementById("sc").value; if ("" == zm || null ==zm){ alert("身份证正面不能为空。"); return false; } if ("" == fm || null ==fm){ alert("身份证反面不能为空。"); return false; } if ("" == sc || null ==sc){ alert("手持身份证不能为空。"); return false; } }; function info(){ alert("上传用户信息可能需要一分钟左右,请耐心等待。"); } </script>
*/ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.UUID; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.sf.json.JSONObject; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.lang3.StringUtils; import org.apache.commons.mail.EmailException; import com.email.SendMailUtil; import com.model.SqlContext; import com.sql.Conn; @SuppressWarnings("serial") @WebServlet(value="/servlet/UploadServlet") public class UpLoadServlet extends HttpServlet { @SuppressWarnings("null") public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setHeader("Content-Type", "text/html;charset=utf-8"); PrintWriter write = response.getWriter(); String savePath = this.getServletContext().getRealPath("/upload"); StringBuffer sb = new StringBuffer(); File saveFileDir = new File(savePath); if (!saveFileDir.exists()) { // 创建临时目录 saveFileDir.mkdirs(); } String tmpPath = this.getServletContext().getRealPath("/temp"); File tmpFile = new File(tmpPath); if (!tmpFile.exists()) { // 创建临时目录 tmpFile.mkdirs(); } DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); MyProcessLister listener = new MyProcessLister(request);// 在文件上传至流时进行文件监听 upload.setProgressListener(listener);// 注册监听 try { List<FileItem> items = upload.parseRequest(request); Iterator<?> itr = items.iterator(); while (itr.hasNext()) { FileItem item = (FileItem) itr.next(); if (!item.isFormField()) // 如果为非文件类型数据 { String fileName = item.getName(); if (null == fileName && 0 == fileName.trim().length()) { continue; } // 文件名和文件后缀名 fileName = fileName.substring(fileName.lastIndexOf("\") + 1); String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase(); String saveFileName = UUID.randomUUID().toString()+"."+fileExt; InputStream is = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\" + saveFileName); sb.append(saveFileName); sb.append(";"); byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标致 int len = 0; while((len = is.read(buffer)) > 0) { out.write(buffer, 0, len); } //关闭输出流 out.close(); //关闭输入流 is.close(); //删除临时文件 item.delete(); } } } catch (FileUploadException e) { System.out.println("throws FileUploadException."); } catch (IOException e) { System.out.println("throw IOException."); } } }