1.jsp页面:method必须为post,enctype="multipart/form-data"
- <form action="UploadServlet" method="post" enctype="multipart/form-data">
- username: <input type="text" name="username"><br>
- file: <input type="file" name="file"><br>
- file2: <input type="file" name="file2"><br>
- <input type="submit" value="submit">
2 web.xml:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <servlet>
- <servlet-name>UploadServlet</servlet-name>
- <servlet-class>com.shengsiyuan.servlet.UploadServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>UploadServlet</servlet-name>
- <url-pattern>/UploadServlet</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
3.Servlet处理类:
jar包:
commons-io-2.0.1.jar
commons-fileupload-1.2.2.jar
- package com.shengsiyuan.servlet;
- import java.io.File;
- import java.io.IOException;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.commons.fileupload.FileItem;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- public class UploadServlet extends HttpServlet {
- //处理文件上传 使用apache 的 FileUpload组件为Servlet及Web应用提供上传功能
- @Override
- protected void doPost(HttpServletRequest req, HttpServletResponse resp)
- throws ServletException, IOException {
- /**
- * 使用FileUpload上传步骤
- * FileUpload:默认上传文件的大小为10k
- */
- //步骤一:DiskFileItemFactory 磁盘文件条目工厂
- DiskFileItemFactory factory = new DiskFileItemFactory();
- //upload文件夹为WebRoot下的一个文件夹;
- //path得到该文件夹的绝对路径
- String path = req.getRealPath("/upload");
- //setRepository方法用于设置一个目录:用于临时存放上传的文件
- //如果文件比较小,会直接存在内存里,如果比较大,则需要缓冲放在磁盘上存放(超过)
- factory.setRepository(new File(path));
- //设置文件大小,如果超出,文件会直接被写到磁盘上面 (1M),如果没超出,则存放在内存里
- factory.setSizeThreshold(1024 * 1024);
- //步骤二:ServletFileUpload:创建指定处理上传的对象;提供(parseRequest)方法去解析请求
- ServletFileUpload upload = new ServletFileUpload(factory);
- try {
- //步骤三:FileItem:提供一序列方法
- //list 为上传的多个文件
- List<FileItem> list = (List<FileItem>) upload.parseRequest(req);
- for (FileItem item : list) {
- //取得form input 的name值
- String name = item.getFieldName();
- if (item.isFormField()) {// 这里处理的是普通文本域 input type=text
- //获得name对应input的value值
- String value = item.getString();
- System.out.println(name + "=" + value);
- //放到request范围
- req.setAttribute(name, value);
- } else {// 这里处理文件类型 type=file
- // 获取到上传文件的名字
- String value = item.getName();
- int start = value.lastIndexOf("//");
- //处理 opera 浏览器会把上传文件的路径都取得,
- String fileName = value.substring(start + 1);
- req.setAttribute(name, fileName);
- // 将文件写到指定磁盘的目录里:路径:path,文件名:fileName
- item.write(new File(path, fileName));
- // 也可由下面的方法写到磁盘
- // OutputStream os = new FileOutputStream(new File(path,
- // fileName));
- // InputStream is = item.getInputStream();
- // byte[] buffer = new byte[400];
- // int length = 0;
- // while((length = is.read(buffer)) != -1)
- // {
- // os.write(buffer, 0, length);
- // }
- //
- // is.close();
- // os.close();
- }
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- //将请求转发到页面
- req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);
- }
- }
4 fileUploadResult.jsp
- <%@ page language="java" import="java.util.*, java.io.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
- %>
- <body>
- <%
- /*
- InputStream is = request.getInputStream();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String buffer = null;
- while(null != (buffer = br.readLine())) {
- out.print(buffer + "<br>");
- }
- br.close();
- is.close();
- */
- %>
- username : ${requestScope.username }<br>
- file: ${requestScope.file}<br>
- file2: ${requestScope.file2 }<br>
- </body>