文件下传Fileupload组件
文件上传Fileupload组件
1.jsp页面:method必须为post,enctype="multipart/form-data"
2 web.xml:
3.Servlet处理类:
jar包:
commons-io-2.0.1.jar
commons-fileupload-1.2.2.jar
4 fileUploadResult.jsp
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>