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 相关文章推荐
js查找父节点的简单方法
Jun 28 Javascript
用Jquery实现多级下拉框无刷新的联动
Dec 22 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
分享两款带遮罩的jQuery弹出框
Dec 30 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
jQuery Ajax全解析
Feb 13 Javascript
详解vue事件对象、冒泡、阻止默认行为
Mar 20 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
Angular项目从新建、打包到nginx部署全过程记录
Dec 09 Javascript
ajax前台后台跨域请求处理方式
Feb 08 Javascript
vue中的自定义分页插件组件的示例
Aug 18 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出现Cannot modify header information问题的解决方法大全
2008/04/09 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php CI框架插入一条或多条sql记录示例
2014/07/29 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
Javascript - HTML的request类
2007/01/09 Javascript
超级24小时弹窗代码 24小时退出弹窗代码 100%弹窗代码(IE only)
2010/06/11 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
浅谈JavaScript函数参数的可修改性问题
2013/12/05 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
js实现图片360度旋转
2017/01/22 Javascript
JS正则替换去空格的方法
2017/03/24 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
基于Vue实现拖拽功能
2020/07/29 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python使用chardet判断字符编码
2015/05/09 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
测绘工程系学生的自我评价
2013/11/30 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android