学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )
生活随笔
收集整理的這篇文章主要介紹了
学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習內容:學習JavaWeb(Day41)
1、文件的上傳
2、文件的查看
3、文件的下載
4、使用工具類上傳文件
5、基于servlet3.0以上的文件上傳
1、文件的上傳
(1)實現文件的上傳需要的依賴包
commons-fileupload.jar
commons-io.jar
(2)在jsp文件創建上傳文件表單
<!--創建可以上傳文件的表單需要聲明enctype="multipart/form-data--> <form class="form-horizontal" action="/fileUpload" method = "post" enctype="multipart/form-data"><div class="form-group"><label class="col-sm-2 control-label">文件描述:</label><div class="col-sm-10"><input type="text" name="desc" /></div></div><div class="form-group"><label class="col-sm-2 control-label">點擊上傳文件:</label><div class="col-sm-10"><input type="file" name="myFile" /></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><input type="submit" value="提交"></div></div> </form>(3)創建FileUploadServlet.java
@WebServlet("/fileUpload") public class FileUploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("WEB-INF/views/file.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//判定當前提交表單是不是一個文件表單 是true 否falseboolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {try {//構建factory對象用于ServletFileUpload構造方法中DiskFileItemFactory factory = new DiskFileItemFactory();//設置上傳文件時用的臨時空間ServletContext servletContext = this.getServletConfig().getServletContext();File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");//文件的臨時目錄factory.setSizeThreshold(1024); //設置臨時空間大小factory.setRepository(repository);ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1024*1024*20);//設置表單提交所有內容總長度upload.setHeaderEncoding("UTF-8");//解決上傳文件名的中文亂碼//獲取表單中所有的輸入項 List<FileItem> fileItems = upload.parseRequest(request);for (FileItem item : fileItems) {String contentType = item.getContentType(); //獲取上傳的文件類型String fieldName = item.getFieldName();//獲取控件name屬性值String name = item.getName();//上傳的文件的文件名稱long size = item.getSize();//獲取文件或文本大小//如果表單中不包含文件if(item.isFormField()){String value = item.getString("UTF-8");//tomcat容器默認采用了iso-8859-1的編碼方法//可以反解碼成二進制在解碼//value = new String(value.getBytes("ISO8859-1"),"UTF-8");System.out.println(value);System.out.println("contentType:" + contentType + "filedName : "+ fieldName + "name: "+ name + "size:" + size);}else{//表單中包含文件System.out.println("contentType:" + contentType + "filedName : "+ fieldName + "name: "+ name + "size:" + size);//獲取上傳文件的后綴名int index = name.lastIndexOf(".");String suffixName = name.substring(index);//生成唯一文件名稱String randomName = UUID.randomUUID().toString();String newName = randomName + suffixName;//構建目錄File dir = new File("d:/img");if(!dir.exists()){dir.mkdir(); //創建單層目錄 mkdirs() 創建多層目錄}//構建文件File file = new File(dir,newName);InputStream is = item.getInputStream();OutputStream os = new FileOutputStream(file);BufferedInputStream bis = new BufferedInputStream(is);byte[] buffer = new byte[1024*1024];BufferedOutputStream bos = new BufferedOutputStream(os);int len = -1;while((len = bis.read(buffer)) != -1){bos.write(buffer,0,len);}bos.flush();bos.close();bis.close();}}} catch (FileUploadException e) {e.printStackTrace();}} else {response.sendError(404, "文件表單設置有誤!");}} }2、文件的查看
(1)創建查看文件的jsp頁面
<html> <head><title>Title</title><link rel="stylesheet" href="/css/bootstrap.min.css"> </head> <body> <img src="/img/show" class="img-circle" alt="" width="100" height="100"> </body> </html>(2)創建ShowFileServlet.java文件
@WebServlet("/img/show") public class ShowFileServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String dir = DirectoryUtil.FILE_DIR;//查看exe文件時進行下載,//查看word和excel文檔時會下載一個zip包,想要查看需要下載插件File file = new File(dir + "研發1固定資產橫向表7.16.xlsx");InputStream is = new FileInputStream(file);//輸出流為response.getOutputStream()OutputStream outputStream = response.getOutputStream();int len = -1;while((len = is.read()) != -1){outputStream.write(len);}is.close();outputStream.close();} }3、文件的下載
(1)創建DownLoadServlet.java文件
@WebServlet("/fileDownload") public class DownLoadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("multipart/form-data");File file = new File("d:/soft/typora-setup-x64.exe");//設置文件的長度,下載時會有進度條response.setContentLength(Long.valueOf(file.length()).intValue());String fileName = new String(file.getName().getBytes("UTF-8"),"ISO8859-1");//設置Content-Disposition,表示文件是被下載使用的。filename是下載的文件名response.setHeader("Content-Disposition","attachment;filename=\""+fileName+"\"");BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());int len = -1;while((len = bis.read()) != -1){bos.write(len);}bos.flush();bos.close();bis.close();} }4、使用工具類上傳文件
(1)創建上傳工具類
public class UploadUtil {public boolean upload(HttpServletRequest request) throws IOException, FileUploadException {boolean isMultipart = ServletFileUpload.isMultipartContent(request);if (isMultipart) {try {//構建factory對象用于ServletFileUpload構造方法中DiskFileItemFactory factory = new DiskFileItemFactory();//設置上傳文件時用的臨時空間File repository = new File("d:/temp");factory.setSizeThreshold(1024); //設置臨時空間大小factory.setRepository(repository);ServletFileUpload upload = new ServletFileUpload(factory);upload.setSizeMax(1024*1024*10);//設置表單提交所有內容總長度//獲取表單中所有的控件List<FileItem> fileItems = upload.parseRequest(request);for (FileItem item : fileItems) {String contentType = item.getContentType(); //獲取上傳的文件類型String fieldName = item.getFieldName();//獲取控件name屬性值String name = item.getName();//上傳的文件的文件名稱long size = item.getSize();//獲取文件或文本大小if (item.isFormField()) {String value = item.getString();value = new String(value.getBytes("ISO8859-1"), "UTF-8");System.out.println(value);System.out.println("contentType:" + contentType + "filedName : " + fieldName + "name: " + name + "size:" + size);} else {System.out.println("contentType:" + contentType + "filedName : " + fieldName + "name: " + name + "size:" + size);//獲取上傳文件的后綴名int index = name.lastIndexOf(".");String suffixName = name.substring(index);//生成唯一文件名稱String randomName = UUID.randomUUID().toString();String newName = randomName + suffixName;//構建目錄File dir = new File("d:/img");if (!dir.exists()) {dir.mkdir(); //創建單層目錄 mkdirs() 創建多層目錄}//構建文件File file = new File(dir, newName);InputStream is = item.getInputStream();OutputStream os = new FileOutputStream(file);BufferedInputStream bis = new BufferedInputStream(is);byte[] buffer = new byte[1024 * 1024];BufferedOutputStream bos = new BufferedOutputStream(os);int len = -1;while ((len = bis.read(buffer)) != -1) {bos.write(buffer, 0, len);}bos.flush();bos.close();bis.close();}}} catch (Exception e) {throw new FileUploadException("文件上傳異常", e);}return true;} else {return false;}} }(2)調用工具類
@WebServlet("/fileUpload") public class FileUploadServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher("WEB-INF/views/file.jsp").forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");UploadUtil uploadUtil = new UploadUtil();try {boolean result = uploadUtil.upload(request);if(!result){response.sendError(404,"表單設置有誤!");}} catch (FileUploadException e) {e.printStackTrace();response.sendError(500,"文件上傳異常");return;} }5、基于servlet3.0以上的文件上傳
(1)增加注解@MultipartConfig
@WebServlet("/upload3") @MultipartConfig(maxRequestSize = 10000,maxFileSize = 2000)//最大請求值,最大文件大小 public class FileUploadServlet3 extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");String desc = request.getParameter("desc");System.out.println(desc);//上傳文件只有一個時 Part file = request.getPart("myFile");Collection<Part> parts = request.getParts();//上傳多個文件int count = 1;for (Part part : parts) {if (part.getName().equals("myFile")) {InputStream is = part.getInputStream();OutputStream os = new FileOutputStream(new File("d:/img/" + count + ".jpg"));int len = -1;while ((len = is.read()) != -1) {os.write(len);}os.flush();is.close();os.close();count++;}}} }總結
以上是生活随笔為你收集整理的学习日志day41(2021-09-03)(1、文件的上传 2、文件的查看 3、文件的下载 4、使用工具类上传文件 5、基于servlet3.0以上的文件上传 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 健身APP开发
- 下一篇: 阿里天池学习赛-金融风控-贷款违约预测