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


Posted in Javascript onDecember 05, 2016

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

下载地址:

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

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

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

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

二:文件上传的表单提交方式必须是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结果页面:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
JS设置cookie、读取cookie、删除cookie
Apr 17 Javascript
AngularJs动态加载模块和依赖注入详解
Jan 11 Javascript
js操作XML文件的实现方法兼容IE与FireFox
Jun 25 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
Nov 08 jQuery
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
Apr 25 Javascript
vue中实现Monaco Editor自定义提示功能
Jul 05 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 #Javascript
解析Javascript单例模式概念与实例
Dec 05 #Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
Dec 05 #Javascript
深入理解jQuery()方法的构建原理
Dec 05 #Javascript
jQuery控制控件文本的长度的操作方法
Dec 05 #Javascript
浅析Ajax语法
Dec 05 #Javascript
jQuery的事件预绑定
Dec 05 #Javascript
You might like
PHP 解决session死锁的方法
2013/06/20 PHP
让ThinkPHP支持大小写url地址访问的方法
2014/10/31 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
用一段js程序来实现动画功能
2007/03/06 Javascript
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
jQuery关键词说明插件cluetip使用指南
2015/04/21 Javascript
JavaScript设计模式经典之工厂模式
2016/02/24 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
mpvue全局引入sass文件的方法步骤
2019/03/06 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
2019/09/24 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
Python输入二维数组方法
2018/04/13 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
儿子婚宴答谢词
2014/01/09 职场文书
工程资料员岗位职责
2014/03/10 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
分公司任命书
2014/06/06 职场文书
小学生常见病防治方案
2014/06/06 职场文书
工厂车间标语
2014/06/19 职场文书
如何写辞职书
2015/02/26 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
学困生帮扶工作总结
2015/08/13 职场文书
《哪吒之魔童降世》观后感:世上哪有随随便便的成功
2019/11/08 职场文书