
單純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();
}
}
}
