文件的上传和下载
文章目錄
- 01 文件上傳的實現
- 02 文件下載實現
01 文件上傳的實現
@WebServlet("/servlet/FileUpLoad") public class FileUpLoad extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException //【A】創建文件上傳的工廠對象FileItemFactory factory=new DiskFileItemFactory();//【B】獲得文件上傳的組件對象ServletFileUpload upload=new ServletFileUpload(factory);//設置文件上傳的編碼upload.setHeaderEncoding("utf-8");try {//【C】 獲得前臺所有的表單數據List<FileItem> list = upload.parseRequest(req);String name="";int age=0;int score=0;String filename="";String filetype="";for(FileItem item : list){//System.out.println(item.getFieldName()+"--"+item.getSize()+"--"+item.getName()+"--"+item.getContentType()+"--"+item.isFormField());if(!item.isFormField()){//證明是文件表單filetype=item.getContentType();String subString = item.getName().substring(item.getName().lastIndexOf("."));/******【F】設置上傳文件的類型 .jpg .png .gif */if(!(".jpg".equals(subString)||".png".equals(subString)||".gif".equals(subString))){req.setAttribute("msg","上傳文件的類型必須是圖片");req.getRequestDispatcher("/add.jsp").forward(req,resp);return;}/*****【E】指定上傳文件的大小*******/if(item.getSize()>20*1024){req.setAttribute("msg","文件最大為20k");req.getRequestDispatcher("/add.jsp").forward(req,resp);return;}/****【D】使用UUID保證文件不重復**********/String uuid = UUID.randomUUID().toString();// 1.jpg 1.1.jpg .jpgfilename=uuid+subString;//文件的上傳/***【C】動態獲得服務器目錄*/String realPath = req.getServletContext().getRealPath("/imgs");System.out.println(realPath);/****【B】創建文件夾*****/File file=new File(realPath);if(!file.exists()){file.mkdirs();}item.write(new File(file,filename));}else{//文本表單項if("name".equals(item.getFieldName())){name = item.getString("utf-8");}if("age".equals(item.getFieldName())){age = Integer.parseInt(item.getString());}if("score".equals(item.getFieldName())){score =Integer.parseInt(item.getString());}}}Student student=new Student(0, name, age, score, filename, filetype);//執行添加的操作StudentService studentService=new StudentServiceImpl();int i = studentService.add(student);if(i>0){resp.sendRedirect(req.getContextPath()+"/show2.jsp");}else {req.setAttribute("msg","注冊失敗");req.getRequestDispatcher("/add.jsp").forward(req,resp);}} catch (Exception e) {e.printStackTrace();}} }/**
- 遇到的問題:
- 1、文件上傳的時候名字中文亂碼: o
- A、 req.setCharacterEncoding("utf-8");
- B、 upload.setHeaderEncoding("utf-8");
- 2、上傳的文件夾名稱必須給出:
- file.exists()
- 3、上傳不到當前服務器的路徑中:
- String realPath = req.getServletContext().getRealPath("/imgs");
- 4、相同的圖片名稱會覆蓋
- String uuid = UUID.randomUUID().toString();
- 5、無法指定上傳文件的大小:
- A、upload.setSizeMax(20);
- B、item.getSize()>20*102
- 6、無法指定上傳文件的類型 :
- ".jpg".equals(subString)
02 文件下載實現
@WebServlet("/servlet/FileDownLoad") public class FileDownLoad extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String realPath = req.getServletContext().getRealPath("/imgs");String filename = req.getParameter("filename");File file=new File(realPath+"/"+filename);//[A]從服務器中把指定的文件讀過來InputStream input=new FileInputStream(file);//設置下載文本的長度resp.setContentLength((int) file.length());//設置文本的類型resp.setContentType(req.getParameter("filetype"));resp.setHeader("Content-Disposition","attachment;filename="+filename);//[B]把讀過來的文件寫到本地OutputStream output=resp.getOutputStream();IOUtils.copy(input,output);output.close();input.close();}}總結
- 上一篇: 哪些平板可以升级如何升级平板电脑
- 下一篇: Json、Gson、Jackson