日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件的上传和下载

發布時間:2023/12/3 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件的上传和下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

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

總結

以上是生活随笔為你收集整理的文件的上传和下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。