1.文件上传给服务器,服务器端必然要写代码进行支持,如下:
我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Apache给我们提供了完善的框架,我们只要引入commons-fileupload-1.2.2.jar 和 commons-io-2.0.1.jar就可以使用这个Apache给我们封装好的框架,这两个jar放到如下目录下:
WebContent/WEB-INF/lib/
引入jar包之后,接下来我们新建一个Servlet程序,命名为"UploadServlet.java",整个工程如下图:
2.PC端上传数据到服务器:
编写服务器端代码UploadServlet.java代码:
1 package com.himi.web; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.List; 6 7 import javax.servlet.ServletException; 8 import javax.servlet.annotation.WebServlet; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 import org.apache.commons.fileupload.FileItem; 14 import org.apache.commons.fileupload.FileItemFactory; 15 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 16 import org.apache.commons.fileupload.servlet.ServletFileUpload; 17 18 /** 19 * Servlet implementation class UploadServlet 20 */ 21 @WebServlet("/UploadServlet") 22 public class UploadServlet extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 27 */ 28 protected void doPost(HttpServletRequest request, 29 HttpServletResponse response) throws ServletException, IOException { 30 // 判断上传数据是否包含文件,true--包含文件,false--不包含文件 31 boolean isMultipart = ServletFileUpload.isMultipartContent(request); 32 //如果上传数据包含文件 33 if (isMultipart) { 34 //获取servlet上下文真实的路径 35 String realpath = request.getSession().getServletContext() 36 .getRealPath("/files"); 37 //打印servlet上下文真实的路径给用户观察 38 System.out.println(realpath); 39 File dir = new File(realpath); 40 if (!dir.exists()) 41 dir.mkdirs(); 42 FileItemFactory factory = new DiskFileItemFactory(); 43 ServletFileUpload upload = new ServletFileUpload(factory); 44 upload.setHeaderEncoding("UTF-8"); 45 try { 46 //工具类ServletFileUpload解析我们的http的post请求的参数数据,解析结果赋给一个List集合 47 //List集合中是我们form(jsp)标签中我们的每个input节点的数据 48 List<FileItem> items = upload.parseRequest(request); 49 for (FileItem item : items) { 50 //如果是一个普通的表单 51 if (item.isFormField()) { 52 String name1 = item.getFieldName();// 得到请求参数的名称 53 String value = item.getString("UTF-8");// 得到参数值 54 System.out.println(name1 + "=" + value); 55 } else {//如果里面有文件数据,就把文件写到当前servlet上下文真实路径里面,文件名称是以系统事件命名的 56 item.write(new File(dir, System.currentTimeMillis() 57 + item.getName().substring( 58 item.getName().lastIndexOf(".")))); 59 } 60 } 61 } catch (Exception e) { 62 e.printStackTrace(); 63 } 64 } 65 } 66 67 }
同时我们还要编写FileUpload.jsp代码如下:
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <%@ page language="java" contentType="text/html; charset=utf-8" 5 pageEncoding="utf-8"%> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>???????</title> 8 </head> 9 <body> 10 11 <form action="UploadServlet" method="post" enctype="multipart/form-data"> 12 请选择文件上传<input type="file" name="file"> <br> 13 <input type="submit" value="提交"> <br> 14 </form> 15 16 </body> 17 </html>
运行FileUpload.jsp动态页面在Tomcat服务器上,显示效果如下:
复制路径http://localhost:8080/web/FileUpload.jsp到360浏览器上,如下:
这里我们选择文件为桌面上的一个 心得.txt ,我们提交之后,观察浏览器 和 服务器反应,如下:
浏览器的反应:
服务器的反应:
追溯到这个打印出来的路径,我们找到了我们上传的文件,如下:
打开文件,文件内容是对的。
到这里说明PC到服务器端的文件上传是没有问题的。
时间: 2024-10-08 11:16:12