模仿Ajax的動態無重新整理上傳檔案
阿新 • • 發佈:2019-01-06
使用到的jar檔案:commons-fileupload-1.3.jar,commons-io-2.4.jar
jsp頁面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="<%=basePath%>FileUploadServlet" method="post" enctype="multipart/form-data" target="hidden_iframe"> <input type="file" name="file" id="uploadfile" /><span style="color:red;" id="msg"></span><br/> <input type="submit" value="submit" /> <iframe name="hidden_iframe" style="display:none;"></iframe> </form> </body> <script type="text/javascript"> function callback(msg){ document.getElementById("uploadfile").outerHTML = document.getElementById("uploadfile").outerHTML; document.getElementById("msg").innerHTML = msg; alert(msg); } </script> </html>
提交的頁面在iframe中開啟,利用隱藏的iframe實現無重新整理上傳檔案,並不是真正的動態無重新整理。
Servlet檔案:
package com.upload; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); boolean isMultipart = ServletFileUpload.isMultipartContent(request); int flag = 0;//0 上傳失敗 1上傳成功 if(isMultipart){ DiskFileItemFactory factory = new DiskFileItemFactory(); factory.setSizeThreshold(5*1024); ServletContext servletContext = this.getServletConfig().getServletContext(); File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir"); factory.setRepository(repository); ServletFileUpload upload = new ServletFileUpload(factory); upload.setSizeMax(5*1024*1024); upload.setHeaderEncoding("utf-8"); String uploadPath = servletContext.getRealPath("/")+File.separator+"upload"; try { List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter = items.iterator(); while (iter.hasNext()) { FileItem item = iter.next(); String filedName = item.getFieldName();//獲取field的name屬性 if (!item.isFormField()) { if(!"".equals(filedName.trim())){ File file = new File(uploadPath, item.getName()); item.write(file); item.delete(); flag = 1; } } } } catch (Exception e) { e.printStackTrace(); } } response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); if(flag == 1){ out.print("<script>parent.callback('上傳成功!')</script>"); }else{ out.print("<script>parent.callback('上傳失敗!')</script>"); } } }