單純form表單提交 上傳文件時,form表單應加上參數 enctype="multipart/form-data
后台接收時的代碼:將表單數據封裝進 list集合中
package com.jredu.servlet; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.jredu.model.User; import com.jredu.service.UserService; import com.jredu.service.Impl.UserServiceImpl; @WebServlet("/register.action") public class Register extends HttpServlet { /** * */ private static final long serialVersionUID = 1057467000241502504L; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub doGet(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub UserService service = new UserServiceImpl(); // 創建磁盤工廠 緩沖區和磁盤目錄 DiskFileItemFactory factory = new DiskFileItemFactory(); // 設置文件上傳的大小限制 ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(1024 * 1024 * 10);// 最大上傳10M upload.setHeaderEncoding("utf-8");// 設置編碼格式 try { String name = null; // 注冊獲取前台的值 String value = null; String newName = null; ArrayList<Object> list = new ArrayList<Object>(); @SuppressWarnings("unchecked") List<FileItem> files = upload.parseRequest(req); for (FileItem fileItem : files) { // 判斷當前的數據時文件還是普通的表單 if (fileItem.isFormField()) { // 是文件 name = fileItem.getFieldName();// 獲取屬性的名字 value = fileItem.getString("utf-8");// 獲取屬性的值 list.add(value); } else {// 是表單 // 獲取文件上傳的文件名 name = fileItem.getName(); // 定義一個新的文件來接收 newName = System.currentTimeMillis() + name;// 以當前的總秒數來命名防止圖片名稱相同而覆蓋 File file = new File("D:\\image\\" + newName); // 圖片的存儲路徑 String headImg = "img/" + newName; list.add(headImg); // 從緩沖區寫入磁盤 fileItem.write(file); fileItem.delete(); } } // 獲取到全部的用戶列表 List<User> uList = service.allUser(); // 將新注冊的用戶存入數據 boolean flag = service.register(list); if (flag) { System.out.println("注冊成功"); // 跳轉到登陸界面 req.getRequestDispatcher("/page/login.jsp").forward(req, resp); } else { System.out.println("注冊失敗"); } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }