1. 程式人生 > >Java中,當表單含有檔案上傳時,提交資料的如何讀取(吐血版)

Java中,當表單含有檔案上傳時,提交資料的如何讀取(吐血版)

int TeamId = 0;
// 用於存放輸出的資訊
String message = "";
// 在自己的專案中構造出一個用於存放使用者照片的資料夾
String projectpath = this.getServletContext().getRealPath(
"/headPhoto/");
// 如果此資料夾不存在,則構造此資料夾
File f = new File(projectpath);
if (!f.exists()) {
f.mkdir();
}


// 構造出檔案工廠,用於存放JSP頁面中傳遞過來的檔案
DiskFileItemFactory factory = new DiskFileItemFactory();
// 設定快取大小,如果檔案大於快取大小時,則先把檔案放到快取中
factory.setSizeThreshold(4 * 1024);
// 設定上傳檔案的儲存路徑
factory.setRepository(f);


// 產生Servlet上傳物件
ServletFileUpload upload = new ServletFileUpload(factory);
// 設定可以上傳檔案大小的上界4MB
upload.setSizeMax(4 * 1024 * 1024);


try {
// 取得所有上傳檔案的資訊
List<FileItem> list = upload.parseRequest(request);
Iterator<FileItem> iter = list.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
// 如果接收到的引數不是一個普通表單(例text等)的元素,那麼執行下面程式碼
if (!item.isFormField()) {
String fieldName = item.getFieldName();// 獲得此表單元素的name屬性
String fileName = item.getName();// 獲得檔案的完整路徑
// System.out.println("1.1:"+fileName);
String contentType = item.getContentType();// 獲得檔案型別
long fileSize = item.getSize();// 獲得檔案大小
// 從檔案的完整路徑中截取出檔名
fileName = fileName.substring(
fileName.lastIndexOf("\\") + 1,
fileName.length());


// 判斷是否有圖片上傳
if (!("".equals(fileName)) && !(fileName == null)) {


// 如果上傳的檔案不是圖片,那麼不上傳
String allImgExt = ".jpg|.jpeg|.gif|.bmp|.png|";
String extName = fileName.substring(
fileName.indexOf("."), fileName.length());
if (allImgExt.indexOf(extName + "|") == -1) {
message = "該檔案型別不允許上傳。請上傳 " + allImgExt
+ " 型別的檔案,當前檔案型別為" + extName;
break;
}


String filepath = projectpath + "\\" + fieldName;
File uf = new File(filepath);
// 更改檔案的儲存路徑,以防止檔案重名的現象出現
if (!uf.exists()) {
uf.mkdir();
}
// 此輸出路徑為儲存到資料庫中photo欄位的路徑
insertDB = "headPhoto/" + fieldName + "/"
+ fileName;
// System.out.println("檔案路徑:"+insertDB+":"+insertDB.length());


File uploadedFile = new File(filepath, fileName);


try {
// 如果在該資料夾中已經有相同的檔案,那麼將其刪除之後再重新建立(只適用於上傳一張照片的情況)
if (uploadedFile.exists()) {
uploadedFile.delete();
}
item.write(uploadedFile);
/**********/


TeamMembersService teamMembersService = new TeamMembersServiceImpl();
if (teamMembersService.updatePhoto(insertDB) != 0) {
message = "上傳檔案成功<br/><br/>基本資訊如下:<br/>檔名:"
+ fileName
+ "<br/>檔案型別:"
+ contentType
+ "<br/>檔案大小:"
+ fileSize;
}


} catch (Exception e) {
e.printStackTrace();
// return ;
}


} else {
// 取得普通的物件(對於像文字框這種型別的使用)
// 對於普通型別的物件暫不做處理
// return ;
}
} else {


String name = item.getFieldName();
String value = item.getString();
value = new String(value.getBytes("ISO-8859-1"),
"UTF-8");
switch (name) {
case "UserName":
UserName = value;
break;
case "Birthday":
Birthday = value;
break;
case "IDCardNum":
IDCardNum = value;
break;
case "Phone":
Phone = value;
break;
case "Level":
Level = value;
break;
case "Rusume":
Rusume = value;
break;
case "Role":
Role = value;
break;
case "Notes":
Notes = value;
break;
case "Summary":
Summary = value;
break;
case "TeamId":
TeamId = Integer.parseInt(value.toString());
break;
default:
break;
}
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
message = "檔案的內容過大,請上傳小於4MB的檔案";
e.printStackTrace();
}
int res = 0;
Members members = new Members();
members.setUserName(UserName);
members.setBirthday(Birthday);
members.setIDCardNum(IDCardNum);
members.setPhone(Phone);
members.setLevel(Level);
members.setRusume(Rusume);
members.setSummary(Summary);
members.setRole(Role);
members.setNotes(Notes);
members.setTeamId(TeamId);
members.setPhoto(insertDB);
TeamMembersService teamMembersService;
try {
teamMembersService = new TeamMembersServiceImpl();
res = teamMembersService.addMembers(members);
if (res != 0) {
// request.setAttribute("info", "新增成功");
// ../../GoManagerPlat/RelayTeamMemberServlet?showPage=1&keyword=<%=a
// %>
response.sendRedirect("/GoManagerPlat/RelayTeamMemberServlet?showPage=1&keyword=");
// out.println("<script>alert('修改成功!');window.history.go(-2)</script>");
// request.getRequestDispatcher(request.getHeader("referer")).forward(request,response);
// request.getRequestDispatcher("/Ok").forward(request,
// response);
} else {
request.setAttribute("info", "新增失敗");
request.getRequestDispatcher("/Error").forward(request,
response);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}