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

前端之家收集整理的这篇文章主要介绍了Servlet实现文件上传,可多文件上传示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、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

比如:

三、举例:

1.fileupload.jsp

<% String path = requestgetContextPath(); String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN">

My JSP 'fileuploadjsp' starting page

<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">

    <a href="/tag/yonghuming/" target="_blank" class="keywords">用户名</a>:<input type="text" name="usename"&gt; <br/> 
    <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>:<input type="file" name="file1"&gt;<br/> 
   <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>: <input type="file" name="file2"&gt;<br/> 
   <input type="submit" value="提交"/&gt;     

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

/**

  • @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"); //设置编码 

//获得磁盘<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>条目工厂 
DiskFileItemFactory factory = new DiskFileItemFactory(); 
//<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>需要<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>到的路径 
String path = requestgetRealPath("/upload"); 

//如果没以下两行设置的话,<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>大的 <a href="/tag/wenjian/" target="_blank" class="keywords">文件</a> 会占用 很多内存, 
//设置暂时存放的 存储室,这个存储室,可以和 最终存储<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a> 的目录不同 
/** 
 * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上, 
 * 按理来说 当<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>一个<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>时,其实是<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>了两份,第一个是以 tem 格式的 
 * 然后再将其真正写到 对应目录的硬盘上 
 */ 
factorysetRepository(new File(path)); 
//设置 缓存的大小,当<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的容量超过该缓存时,直接放到 暂时存储室 
factorysetSizeThreshold(1024*1024) ; 

//高水平的API<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a><a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>处理 
ServletFileUpload upload = new ServletFileUpload(factory); 


try { 
  //可以<a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a>多个<a href="/tag/wenjian/" target="_blank" class="keywords">文件</a> 
  List<FileItem> list = (List<FileItem>)uploadparseRequest(request); 

  for(FileItem item : list) 
  { 
    //<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>表单的<a href="/tag/shuxing/" target="_blank" class="keywords">属性</a>名字 
    String name = itemgetFieldName(); 

    //如果<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>的 表单信息是普通的 文本 信息 
    if(itemisFormField()) 
    {           
      //<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="/tag/yonghu/" target="_blank" class="keywords">用户</a>具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 
      String value = itemgetString() ; 

      requestsetAttribute(name,value); 
    } 
    //对传入的非 简单的字符串进行处理 ,比如说二进制的 <a href="/tag/tupian/" target="_blank" class="keywords">图片</a>,电影这些 
    else 
    { 
      /** 
       * 以下三步,主要<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a> <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的名字 
       */ 
      //<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a>路径名 
      String value = itemgetName() ; 
      //索引到最后一个反斜杠 
      int start = valuelastIndexOf("\\"); 
      //<a href="/tag/jiequ/" target="_blank" class="keywords">截取</a> <a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的 字符串名字,加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("<a href="/tag/huoqu/" target="_blank" class="keywords">获取</a><a href="/tag/shangchuan/" target="_blank" class="keywords">上传</a><a href="/tag/wenjian/" target="_blank" class="keywords">文件</a>的总共的容量:"+itemgetSize()); 

      // inread(buf) 每次读到的数据存放在  buf 数组中 
      while( (length = inread(buf) ) != -1) 
      { 
        //在  buf 数组中 取出数据 写到 (<a href="/tag/shuchu/" target="_blank" class="keywords">输出</a>流)磁盘上 
        outwrite(buf,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

<% String path = requestgetContextPath(); String basePath = requestgetScheme()+"://"+requestgetServerName()+":"+requestgetServerPort()+path+"/"; %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 01 Transitional//EN">

My JSP 'filedemojsp' starting page

<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,keyword3">
<Meta http-equiv="description" content="This is my page">

用户名:${requestScopeusename }

文件:${requestScopefile1 }

${requestScopefile2 }

<img alt="go" src="upload/<%=(String)requestgetAttribute("file1")%> " />

4结果页面

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

猜你在找的JavaScript相关文章