JavaWeb----文件的上传
首先导入所需要的包:
编写jsp前段页面:
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="utf-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="UploadServlet" enctype="multipart/form-data" method="post"> 11 description:<textarea rows="20" cols="10" name="description"></textarea><br/> 12 file:<input type="file" name="myfile" /> 13 <input type="submit" value="提交"> 14 </form> 15 </body> 16 </html>
上传成功页面:
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="utf-8"> 7 <title>消息提示</title> 8 </head> 9 <body> 10 ${info} 11 </body> 12 </html>
最后是关键的核心代码:
1 package com.servlet.yn; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.util.Iterator; 8 import java.util.List; 9 import java.util.UUID; 10 11 import javax.servlet.ServletException; 12 import javax.servlet.annotation.WebServlet; 13 import javax.servlet.http.HttpServlet; 14 import javax.servlet.http.HttpServletRequest; 15 import javax.servlet.http.HttpServletResponse; 16 17 import org.apache.commons.fileupload.FileItem; 18 import org.apache.commons.fileupload.FileUploadException; 19 import org.apache.commons.fileupload.ProgressListener; 20 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 21 import org.apache.commons.fileupload.servlet.ServletFileUpload; 22 23 24 @WebServlet("/UploadServlet") 25 public class UploadServlet extends HttpServlet { 26 private static final long serialVersionUID = 1L; 27 28 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 29 String savePath = this.getServletContext().getRealPath("/fileSaves"); 30 File saveFile = new File(savePath); 31 if(!saveFile.exists()) { 32 saveFile.mkdirs(); 33 } 34 String tempPath = this.getServletContext().getRealPath("/temp"); 35 File tempFile = new File(tempPath); 36 if(!tempFile.exists()) { 37 tempFile.mkdirs(); 38 } 39 40 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); 41 diskFileItemFactory.setSizeThreshold(10240); 42 //临时文件存储位置 43 diskFileItemFactory.setRepository(tempFile); 44 //构建文件上传核心对象 45 ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory); 46 //监听上传进度 47 servletFileUpload.setProgressListener(new ProgressListener() { 48 @Override 49 public void update(long arg0, long arg1, int arg2) { 50 System.out.println(arg0 + " " + arg1); 51 } 52 }); 53 servletFileUpload.setHeaderEncoding("utf-8"); 54 //判断请求类型 55 if(servletFileUpload.isMultipartContent(request)) { 56 servletFileUpload.setFileSizeMax(1024 * 1024 * 1024); 57 servletFileUpload.setSizeMax(1024 * 1024 * 1024 * 10); 58 try { 59 List<FileItem> fileItmes = servletFileUpload.parseRequest(request); 60 Iterator<FileItem> iterator = fileItmes.iterator(); 61 while(iterator.hasNext()) { 62 FileItem fileItem = iterator.next(); 63 //判断是不是表单字段和上传组件 64 if(fileItem.isFormField()) { 65 //获取字段名称和字段值 66 String fieldName = fileItem.getFieldName(); 67 String fileValue = fileItem.getString("utf-8"); 68 System.out.println(fieldName + "------ " + fileValue); 69 }else { 70 //获取文件名 71 String name = fileItem.getName(); 72 String fileName = name.substring(name.lastIndexOf("\\") + 1, name.lastIndexOf(".")); 73 //获取拓展名 74 String extName = name.substring(name.lastIndexOf(".")); 75 //判断文件大小和磁盘大小 76 if(fileItem.getSize() < servletFileUpload.getFileSizeMax()) { 77 //获取输入流 78 InputStream inputStream = fileItem.getInputStream(); 79 //获得随机UUID 80 String uuid = UUID.randomUUID().toString().replaceAll("-", ""); 81 //拼装最后的文件路径 82 String finalPath = savePath + "\\" + fileName + uuid + "." + extName; 83 //文件上传 84 FileOutputStream fileOutputStream = new FileOutputStream(finalPath); 85 int len = 0; 86 byte[] bytes = new byte[1024]; 87 while((len = inputStream.read(bytes)) > 0) { 88 fileOutputStream.write(bytes, 0, len); 89 } 90 fileOutputStream.flush(); 91 fileOutputStream.close(); 92 inputStream.close(); 93 request.setAttribute("info", "文件上传成功!存储路径是" + finalPath); 94 request.getRequestDispatcher("/message.jsp").forward(request, response); 95 } 96 97 } 98 } 99 } catch (FileUploadException e) { 100 e.printStackTrace(); 101 } 102 } 103 104 105 106 107 108 109 110 } 111 112 }
结果截图:
编辑于2018-11-20
posted on 2018-11-20 21:08 thelast9527 阅读(105) 评论(0) 编辑 收藏 举报