1、 要有一个 form 标签, method=post 请求
2、 form 标签的 encType 属性值必须为 multipart/form-data 值
3、 在 form 标签中使用 input type=file 添加上传的文件
4、 编写服务器代码(Servlet 程序) 接收, 处理上传的数据。
其中:encType=multipart/form-data 表示提交的数据, 以多段(每一个表单项一个数据段) 的形式进行拼接, 然后以二进制流的形式发送给服务器
5.图解
代码:
jsp
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 2 <html> 3 <head> 4 <title>上传</title> 5 </head> 6 <body> 7 <form action="uploadServlet" method="post" enctype="multipart/form-data" > 8 姓名:<input type="text" name="username"><br/> 9 文件:<input type="file" name="file"><br/> 10 <input type="submit" value="submit"> 11 </form> 12 </body> 13 </html>
servlet
1 package NCU; 2 3 import org.apache.commons.fileupload.FileItem; 4 import org.apache.commons.fileupload.FileItemFactory; 5 import org.apache.commons.fileupload.FileUploadException; 6 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 7 import org.apache.commons.fileupload.servlet.ServletFileUpload; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.annotation.WebServlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 import java.io.File; 15 import java.io.IOException; 16 import java.util.List; 17 18 @WebServlet("/uploadServlet") 19 public class UploadServlet extends HttpServlet { 20 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 21 if (ServletFileUpload.isMultipartContent(request)) { 22 //创建 FileItemFactory 工厂实现类 23 FileItemFactory fileItemFactory = new DiskFileItemFactory(); 24 // 创建用于解析上传数据的工具类 ServletFileUpload 类 25 ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); 26 //防止文件名乱码 27 servletFileUpload.setHeaderEncoding("UTF-8"); 28 try { 29 // 解析上传的数据, 得到每一个表单项 FileItem 30 List<FileItem> list = servletFileUpload.parseRequest(request); 31 for (FileItem fileItem : list) { 32 if (fileItem.isFormField()) { 33 System.out.println("name值: " + fileItem.getFieldName()); 34 System.out.println("value值: " + fileItem.getString("UTF-8")); 35 } else { 36 System.out.println("name值: " + fileItem.getFieldName()); 37 //获取文件名 38 System.out.println("文件名: " + fileItem.getName()); 39 //把文件上传的位置 40 fileItem.write(new File("D:\\" + fileItem.getName())); 41 } 42 } 43 } catch (Exception e) { 44 e.printStackTrace(); 45 } 46 } 47 48 } 49 50 }
原文:https://www.cnblogs.com/0error0warning/p/12561938.html