package web.servlet.file; import domain.Admin; import domain.Photo; import domain.Student; import domain.Teacher; 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 service.PhotoService; import service.impl.PhotoServiceImpl; 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 javax.servlet.http.HttpSession; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; @WebServlet("/uploadImageServlet") public class UploadImageServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); Student student = (Student) session.getAttribute("student"); Teacher teacher = (Teacher) session.getAttribute("teacher"); Admin admin = (Admin) session.getAttribute("admin"); String id = ""; if (student != null) { id = student.getS_id(); } request.setAttribute("message", ""); request.setAttribute("path", ""); String filename = null; String newFileName = null; // 设置上传图片的保存路径- String savePath = this.getServletContext().getRealPath("/photos"); File file = new File(savePath); // 判断上传文件的保存目录是否存在- if (!file.exists() && !file.isDirectory()) { System.out.println(savePath + "目录不存在,需要创建"); // 创建目录 file.mkdir(); } DiskFileItemFactory factory = new DiskFileItemFactory(); // 2、创建一个文件上传解析器- ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); // 3、判断提交上来的数据是否是上传表单的数据- if (!ServletFileUpload.isMultipartContent(request)) { // 按照传统方式获取数据- return; } try { List list = upload.parseRequest(request); System.out.println(list.toString());// 文件的路径 以及保存的路径- for (FileItem item : list) { filename = item.getName();// 获得一个项的文件名称- try { newFileName = id + filename.substring(filename.lastIndexOf(".")); filename = id + filename.substring(filename.lastIndexOf(".")); } catch (Exception e) { e.printStackTrace(); } if (filename == null || filename.trim().equals("")) {// 如果為空則跳過 continue; } // 報錯 需要過濾文件名稱 java.io.FileNotFoundException: // G:\测试02\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FaceUp\WEB-INF\images\C:\Users\Ray\Pictures\2.jpeg // (文件名、目录名或卷标语法不正确。) filename = filename.substring(filename.lastIndexOf("\\") + 1); // System.out.print(filename); if (filename.substring(filename.lastIndexOf(".") + 1).equals("JPG") || filename.substring(filename.lastIndexOf(".") + 1).equals("JPEG") || filename.substring(filename.lastIndexOf(".") + 1).equals("gif") || filename.substring(filename.lastIndexOf(".") + 1).equals("GIF") || filename.substring(filename.lastIndexOf(".") + 1).equals("jpg") || filename.substring(filename.lastIndexOf(".") + 1).equals("jpeg")) { InputStream in = item.getInputStream();// 獲得上傳的輸入流 FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);// 指定web-inf目錄下的images文件 request.setAttribute("path", "photos"+"\\" + filename); int len = 0; byte buffer[] = new byte[1024]; while ((len = in.read(buffer)) > 0)// 每次讀取 { out.write(buffer, 0, len); } in.close(); out.close(); item.delete(); } else { //必须是图片才能上传否则失败 request.setAttribute("update_msg", "上传失败,只能上传类型为jpg或GIF的图像文件!"+String.format("%tT",new Date())); // request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); return; } } } catch (FileUploadException e) { e.printStackTrace(); } Photo photo = new Photo(); photo.setPhotoId(id); photo.setPhotoName(newFileName); PhotoService service = new PhotoServiceImpl(); Photo photo1= service.findPhotoByPhotoId(id); if (photo1==null) { service.addPhoto(photo); }else { service.updatePhoto(photo); } request.setAttribute("update_msg", "上传成功!"+String.format("%tT",new Date())); // request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response); request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/WEB-INF/student/studentAddPhoto.jsp").forward(request, response); } }