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 相关文章推荐
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
Jquery数字上下滚动动态切换插件
Aug 08 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
响应式框架Bootstrap栅格系统的实例
Dec 19 Javascript
json数据传到前台并解析展示成列表的方法
Aug 06 Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
Jun 04 Javascript
微信小程序image图片加载完成监听
Aug 31 Javascript
vue中destroyed方法的使用说明
Jul 21 Javascript
jquery实现加载更多&quot;转圈圈&quot;效果(示例代码)
Nov 09 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 数组二分法查找函数代码
2010/02/16 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
php使用pdo连接sqlite3的配置示例
2016/05/27 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
jquery text()要注意啦
2009/10/30 Javascript
使用js获取图片原始尺寸
2014/12/03 Javascript
js实现Select下拉框具有输入功能的方法
2015/02/06 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
浅谈TypeScript的类型保护机制
2020/02/23 Javascript
Python下载指定页面上图片的方法
2016/05/12 Python
Python入门必须知道的11个知识点
2018/03/21 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
Python callable内置函数原理解析
2020/03/05 Python
使用python创建生成动态链接库dll的方法
2020/05/09 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
世界上最好的帽子:Tilley
2016/11/27 全球购物
英国男士时尚购物网站:Stuarts London
2017/10/22 全球购物
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
经典公益广告词
2014/03/13 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS