网络编程
位置:首页>> 网络编程>> JavaScript>> Servlet实现文件上传,可多文件上传示例

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

作者:hzc543806053  发布时间:2023-08-25 02:31:29 

标签:servlet,文件上传

一、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实现文件上传,可多文件上传示例

来源:http://blog.csdn.net/hzc543806053/article/details/7524491

0
投稿

猜你喜欢

  • BOF 指示当前记录位置位于 Recordset 对象的第一个记录之前。EOF 指示当前记录位置位于 Recordset 对象的最后一个记录
  • 本文给出了MySQL数据库中定义外键的必要性、具体的定义步骤和相关的一些基本操作,供大家参考!定义数据表假如某个电脑生产商,它的数据库中保存
  • 这句话后面的1200是什么单位来的啊?delete from online where datediff(""s&quo
  • 在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的
  • 产品通常分两种,一种是遵循现有用户习惯,一种是颠覆用户习惯。至于什么是用户习惯,你现在用右手还是左手操作鼠标,这就是你的习惯。很多公司团队专
  • 阅读上一篇:FrontPage2002简明教程三:网页布局 网页的强大之处就在它的超链接,在浏览器中通过点击网页中的超链接,可以很方便地打开
  • asp之家注:那么为什么要使用分页呢?当记录不多的时候,如10个或20个,我们可以也没必要使用分页来显示数据,但是数据是在不断增加的,当到了
  • 2003年以来,网页的平均尺寸已经增长3倍。从2003到2008,网页的平均尺寸从93.7K增至312K,增幅233%。同时,在这5年之内,
  • 关于数据库的逻辑设计,是一个很广泛的问题。本文主要针对开发应用中遇到在MS SQL Server上进行表设计时,对表的主键设计应注意的问题以
  • 本文实例为大家分享了Jsp+Servlet实现简单登录注册查询的具体代码,供大家参考,具体内容如下1、注册功能:制作一个注册页面用户输入:用
  •   继续Mootools的扩展,适用于Mootools 1.1及1.2,这次在Element扩展了两个非常简单的方法,一个用来获取
  • 代码如下:--函数 CREATE function fn_GetPy(@str nvarchar(4000)) returns nvarch
  • 表单验证是WEB开发中经常遇到的问题,我们以前常见的做法是:在客户端对表单域进行内容的检查,看是否是满足一定的要求或满足一定的结构,比如:是
  •  function f(x){  alert(x);  return 
  • 本文实例讲述了Python基于多线程实现ping扫描功能。分享给大家供大家参考,具体如下:# -*- coding:utf-8 -*-#!
  • 这个使用起来很简单,以前需要的时候在网上找的,用了感觉还不错,具体的看演示就明白了。,这个可以保留你文章中的html标记,需要你修改的就是下
  • 一.windows系统的解决方法1.首先以系统管理员身份登陆系统。2.停止MySQL的服务。3.进入命令窗口,然后进入MySQL的安装目录,
  • 一个拖动层和Onmouse自动下拉效果,IE支持,不支持ff。下面所示的效果四个小块可以拖动到页面任意点,大黑块可以连同四个小块随动。<
  • MySQL Proxy(MySQL代理)是一个通过MySQL网络协议,提供MySQL服务器与客户端之间连接的应用工具,在基本配置条件下,My
  • 需求:获取oracle表增量信息,发送至udp514端口,支持ip配置步骤:(1)需要的jar  oracle的 odbc5.ja
手机版 网络编程 asp之家 www.aspxhome.com