首页 > 编程 > JavaScript > 正文

Servlet实现文件上传,可多文件上传示例

2019-11-19 18:39:52
字体:
来源:转载
供稿:网友

一、Servlet实现文件上传,需要添加第三方提供的jar包

下载地址:

1) commons-fileupload-1.2.2-bin.zip:  点击打开链接

2)  commons-io-2.3-bin.zip:    点击打开链接 

接着把这两个jar包放到 lib文件夹下:

二:文件上传的表单提交方式必须是POST方式,

编码类型:enctype="multipart/form-data",默认是 application/x-www-form-urlencoded

比如:

<form action="FileUpLoad"enctype="multipart/form-data"method="post">

三、举例:

1.fileupload.jsp

<%@ page language="java" import="javautil*" pageEncoding="UTF-8"%> <% String path = requestgetContextPath(); String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"; %>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN"> <html>  <head>   <base href="<%=basePath%>">      <title>My JSP 'fileuploadjsp' starting page</title>      <meta http-equiv="pragma" content="no-cache">   <meta http-equiv="cache-control" content="no-cache">   <meta http-equiv="expires" content="0">     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   <meta http-equiv="description" content="This is my page">   <!--   <link rel="stylesheet" type="text/css" href="stylescss">   -->   </head>    <body>    <!-- enctype 默认是 application/x-www-form-urlencoded -->    <form action="FileUpLoad" enctype="multipart/form-data" method="post" >              用户名:<input type="text" name="usename"> <br/>         上传文件:<input type="file" name="file1"><br/>        上传文件: <input type="file" name="file2"><br/>        <input type="submit" value="提交"/>        </form>      </body> </html> 

2.实际处理文件上传的 FileUpLoad.java

package comservletfileupload; import javaioFile; import javaio*; import javaioIOException; import javaioPrintWriter; import javautilList;  import javaxservletServletException; import javaxservlethttpHttpServlet; import javaxservlethttpHttpServletRequest; import javaxservlethttpHttpServletResponse; import orgapachecommonsfileuploadFileItem; import orgapachecommonsfileuploadFileUploadException; import orgapachecommonsfileuploaddiskDiskFileItemFactory; import orgapachecommonsfileuploadservletServletFileUpload;  /**  *  * @author Administrator  * 文件上传  * 具体步骤:  * 1)获得磁盘文件条目工厂 DiskFileItemFactory 要导包  * 2) 利用 request 获取 真实路径 ,供临时文件存储,和 最终文件存储 ,这两个存储位置可不同,也可相同  * 3)对 DiskFileItemFactory 对象设置一些 属性  * 4)高水平的API文件上传处理 ServletFileUpload upload = new ServletFileUpload(factory);  * 目的是调用 parseRequest(request)方法 获得 FileItem 集合list ,  *    * 5)在 FileItem 对象中 获取信息,  遍历, 判断 表单提交过来的信息 是否是 普通文本信息 另做处理  * 6)  *  第一种 用第三方 提供的 itemwrite( new File(path,filename) ); 直接写到磁盘上  *  第二种 手动处理   *  */ public class FileUpLoad extends HttpServlet {    public void doPost(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {          requestsetCharacterEncoding("utf-8"); //设置编码          //获得磁盘文件条目工厂     DiskFileItemFactory factory = new DiskFileItemFactory();     //获取文件需要上传到的路径     String path = requestgetRealPath("/upload");          //如果没以下两行设置的话,上传大的 文件 会占用 很多内存,     //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同     /**      * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,      * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 tem 格式的      * 然后再将其真正写到 对应目录的硬盘上      */     factorysetRepository(new File(path));     //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室     factorysetSizeThreshold(1024*1024) ;          //高水平的API文件上传处理     ServletFileUpload upload = new ServletFileUpload(factory);               try {       //可以上传多个文件       List<FileItem> list = (List<FileItem>)uploadparseRequest(request);              for(FileItem item : list)       {         //获取表单的属性名字         String name = itemgetFieldName();                  //如果获取的 表单信息是普通的 文本 信息         if(itemisFormField())         {                     //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的           String value = itemgetString() ;                      requestsetAttribute(name, value);         }         //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些         else         {           /**            * 以下三步,主要获取 上传文件的名字            */           //获取路径名           String value = itemgetName() ;           //索引到最后一个反斜杠           int start = valuelastIndexOf("//");           //截取 上传文件的 字符串名字,加1是 去掉反斜杠,           String filename = valuesubstring(start+1);                      requestsetAttribute(name, filename);                      //真正写到磁盘上           //它抛出的异常 用exception 捕捉                      //itemwrite( new File(path,filename) );//第三方提供的                      //手动写的           OutputStream out = new FileOutputStream(new File(path,filename));                      InputStream in = itemgetInputStream() ;                      int length = 0 ;           byte [] buf = new byte[1024] ;                      Systemoutprintln("获取上传文件的总共的容量:"+itemgetSize());            // inread(buf) 每次读到的数据存放在  buf 数组中           while( (length = inread(buf) ) != -1)           {             //在  buf 数组中 取出数据 写到 (输出流)磁盘上             outwrite(buf, 0, length);                        }                      inclose();           outclose();         }       }                          } catch (FileUploadException e) {       // TODO Auto-generated catch block       eprintStackTrace();     }     catch (Exception e) {       // TODO Auto-generated catch block              //eprintStackTrace();     }               requestgetRequestDispatcher("filedemojsp")forward(request, response);         }  } System.out.println("获取上传文件的总共的容量:"+item.getSize()); 

3.filedemo.jsp

<%@ page language="java" import="javautil*" pageEncoding="UTF-8"%> <% String path = requestgetContextPath(); String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"; %>  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN"> <html>  <head>   <base href="<%=basePath%>">      <title>My JSP 'filedemojsp' starting page</title>      <meta http-equiv="pragma" content="no-cache">   <meta http-equiv="cache-control" content="no-cache">   <meta http-equiv="expires" content="0">     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   <meta http-equiv="description" content="This is my page">   <!--   <link rel="stylesheet" type="text/css" href="stylescss">   -->   </head>    <body>      用户名:${requestScopeusename } <br/>   文件:${requestScopefile1 }<br/>   ${requestScopefile2 }<br/>   <!-- 把上传的图片显示出来 -->   <img alt="go" src="upload/<%=(String)requestgetAttribute("file1")%> " />           </body> </html> 

4结果页面:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表