文件上传FileUpload组件

1.jsp页面:method必须为post,enctype="multipart/form-data"

Html代码   收藏代码
  1. <form action="UploadServlet" method="post" enctype="multipart/form-data">  
  2.      
  3.    username: <input type="text" name="username"><br>  
  4.    file: <input type="file" name="file"><br>  
  5.    file2: <input type="file" name="file2"><br>  
  6.      
  7.    <input type="submit" value="submit">  



2 web.xml:

Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     <servlet-name>UploadServlet</servlet-name>  
  9.     <servlet-class>com.shengsiyuan.servlet.UploadServlet</servlet-class>  
  10.   </servlet>  
  11.   
  12.   <servlet-mapping>  
  13.     <servlet-name>UploadServlet</servlet-name>  
  14.     <url-pattern>/UploadServlet</url-pattern>  
  15.   </servlet-mapping>  
  16.   <welcome-file-list>  
  17.     <welcome-file>index.jsp</welcome-file>  
  18.   </welcome-file-list>  
  19. </web-app>  



3.Servlet处理类:

jar包:
commons-io-2.0.1.jar
commons-fileupload-1.2.2.jar

Java代码   收藏代码
  1. package com.shengsiyuan.servlet;  
  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.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.   
  12. import org.apache.commons.fileupload.FileItem;  
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;  
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;  
  15.   
  16. public class UploadServlet extends HttpServlet {  
  17.     //处理文件上传 使用apache 的 FileUpload组件为Servlet及Web应用提供上传功能  
  18.     @Override  
  19.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  20.             throws ServletException, IOException {  
  21.         /** 
  22.          * 使用FileUpload上传步骤 
  23.          * FileUpload:默认上传文件的大小为10k 
  24.          */  
  25.         //步骤一:DiskFileItemFactory 磁盘文件条目工厂  
  26.         DiskFileItemFactory factory = new DiskFileItemFactory();  
  27.         //upload文件夹为WebRoot下的一个文件夹;  
  28.         //path得到该文件夹的绝对路径  
  29.         String path = req.getRealPath("/upload");  
  30.         //setRepository方法用于设置一个目录:用于临时存放上传的文件  
  31.         //如果文件比较小,会直接存在内存里,如果比较大,则需要缓冲放在磁盘上存放(超过)  
  32.         factory.setRepository(new File(path));  
  33.         //设置文件大小,如果超出,文件会直接被写到磁盘上面 (1M),如果没超出,则存放在内存里  
  34.         factory.setSizeThreshold(1024 * 1024);  
  35.         //步骤二:ServletFileUpload:创建指定处理上传的对象;提供(parseRequest)方法去解析请求  
  36.         ServletFileUpload upload = new ServletFileUpload(factory);  
  37.   
  38.         try {  
  39.             //步骤三:FileItem:提供一序列方法  
  40.             //list 为上传的多个文件  
  41.             List<FileItem> list = (List<FileItem>) upload.parseRequest(req);  
  42.             for (FileItem item : list) {  
  43.                 //取得form input 的name值  
  44.                 String name = item.getFieldName();  
  45.                 if (item.isFormField()) {// 这里处理的是普通文本域 input type=text  
  46.                     //获得name对应input的value值  
  47.                     String value = item.getString();  
  48.                     System.out.println(name + "=" + value);  
  49.                     //放到request范围  
  50.                     req.setAttribute(name, value);  
  51.                 } else {// 这里处理文件类型 type=file  
  52.                     // 获取到上传文件的名字  
  53.                     String value = item.getName();  
  54.                     int start = value.lastIndexOf("//");  
  55.                     //处理 opera 浏览器会把上传文件的路径都取得,  
  56.                     String fileName = value.substring(start + 1);  
  57.                     req.setAttribute(name, fileName);  
  58.                     // 将文件写到指定磁盘的目录里:路径:path,文件名:fileName  
  59.                     item.write(new File(path, fileName));  
  60.                     // 也可由下面的方法写到磁盘           
  61.                     // OutputStream os = new FileOutputStream(new File(path,  
  62.                     // fileName));  
  63.                     // InputStream is = item.getInputStream();  
  64.                     // byte[] buffer = new byte[400];  
  65.                     // int length = 0;  
  66.                     // while((length = is.read(buffer)) != -1)  
  67.                     // {  
  68.                     // os.write(buffer, 0, length);  
  69.                     // }  
  70.                     //                    
  71.                     // is.close();  
  72.                     // os.close();  
  73.                 }  
  74.             }  
  75.   
  76.         } catch (Exception ex) {  
  77.             ex.printStackTrace();  
  78.         }  
  79.         //将请求转发到页面  
  80.         req.getRequestDispatcher("fileUploadResult.jsp").forward(req, resp);  
  81.     }  
  82. }  





4 fileUploadResult.jsp

Html代码   收藏代码
  1.  <%@ page language="java" import="java.util.*, java.io.*" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6.  <body>  
  7.    <%  
  8.    /*  
  9.     InputStream is = request.getInputStream();  
  10.     BufferedReader br = new BufferedReader(new InputStreamReader(is));  
  11.     String buffer = null;  
  12.     while(null != (buffer = br.readLine())) {  
  13.         out.print(buffer + "<br>");  
  14.     }  
  15.     br.close();  
  16.     is.close();  
  17.    */  
  18.    %>  
  19.    username : ${requestScope.username }<br>  
  20.    file: ${requestScope.file}<br>  
  21.    file2: ${requestScope.file2 }<br>   
  22.   </body>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值