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 相关文章推荐
JavaScript 使用技巧精萃(.net html
Apr 25 Javascript
javascript 面向对象编程 聊聊对象的事
Sep 17 Javascript
javascript中2个感叹号的用法实例详解
Sep 04 Javascript
JQuery中的事件及动画用法实例
Jan 26 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
Dec 11 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
Jun 14 Javascript
js中判断变量类型函数typeof的用法总结
Aug 09 Javascript
js本地图片预览实现代码
Oct 09 Javascript
Angular 4.x 路由快速入门学习
May 03 Javascript
js+css3实现炫酷时钟
Aug 18 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
微信小程序 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无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
jquery 简短右键菜单 多浏览器兼容
2010/01/01 Javascript
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
如何制作浮动广告 JavaScript制作浮动广告代码
2012/12/30 Javascript
jquery()函数的三种语法介绍
2013/10/09 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
手淘flexible.js框架使用和源代码讲解小结
2018/10/15 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python编码最佳实践之总结
2016/02/14 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
django项目中新增app的2种实现方法
2020/04/01 Python
python语言是免费还是收费的?
2020/06/15 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
css3的transition属性详解
2014/12/15 HTML / CSS
CSS3实现多样的边框效果
2018/05/04 HTML / CSS
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
HTML5新特性 多线程(Worker SharedWorker)
2017/04/24 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
检察官就职演讲稿
2014/01/13 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
妈妈活动方案
2014/08/15 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
工伤劳动仲裁代理词
2015/05/25 职场文书
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记