上一篇讲解了smartupload组件上传,那么这一篇我们讲解commons-FileUpload组件上传

FileUpload是Apache组织(www.apache.org)提供的免费的上传组件,可以直接从Apache站点上下载(下载地址:http://commons.apache.org/fileupload/),本文使用的版本是1.2.1,但是FileUpload组件本身还依赖于commons组件,所以从Apache下载此组件的时候还需要连同commons组件的IO包一起下载(下载地址:http://commons.apache.org/io/) 
commons-fileUpload上传组件对中文进行了良好的处理,对上传文件不会出现中文乱码问题,是目前最广泛的组件,
将commons-fileupload-1.2.1.jar和commons-io-1.4.jar配置到TOMCAT_HOME/lib/目录中
³FileUpload的具体上传操作与SmartUpload相比有着很高的复杂度,下面来看一看FileUpload上传的基本步骤:
  1. 1创建磁盘工厂:DiskFileItemFactory factory = new DiskFileItemFactory();
  2. 创建处理工具:ServletFileUpload upload = new ServletFileUpload(factory);
  3. 设置上传文件大小:upload.setFileSizeMax(3145728);
  4. 接收全部内容:List<FileItem> items = upload.parseRequest(request);

上传原理

使用fileupload组件接收完全部的数据之后,所有的数据都保存在了List集合之中,则就需要使用Iterator输出每一个,但是由于其中既有普通的文本数据又有上传的文件,每一个上传内容都使用一个FileItem类对象表示。

所以当使用Iterator依次取出每一个FileItem对象的时候,就可以使用FileItem类中的isFormField()方法来判断当前操作的内容是普通的文本还是上传文件,如果是上传文件,则将文件的内容依次取出;如果是普通的文本,则直接通过getString()方法取得具体的信息。

 
 
组件上传代码实例一
html代码
  1. <html>
  2. <head><title>commons-FileUpload组件上传</title></head>
  3. <body>
  4. <form action="fileupload_demo01.jsp" method="post" enctype="multipart/form-data">
  5. 姓名:<input type="text" name="uname"><br>
  6. 照片:<input type="file" name="pic"><br>
  7. <input type="submit" value="上传">
  8. <input type="reset" value="重置">
  9. </form>
  10. </body>
  11. </html>

jsp代码

  1. <%@ page contentType="text/html" pageEncoding="GBK"%>
  2. <%@ page import="java.util.*"%>
  3. <%@ page import="org.apache.commons.fileupload.*"%>
  4. <%@ page import="org.apache.commons.fileupload.disk.*"%>
  5. <%@ page import="org.apache.commons.fileupload.servlet.*"%>
  6. <html>
  7. <head><title>commons-FileUpload组件上传</title></head>
  8. <body>
  9. <%
  10. DiskFileItemFactory factory = new DiskFileItemFactory() ;
  11. ServletFileUpload upload= new ServletFileUpload(factory) ;
  12. upload.setFileSizeMax(3 * 1024 * 1024) ; // 只能上传3M
  13. List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
  14. Iterator<FileItem> iter = items.iterator() ;
  15. while(iter.hasNext()){
  16. FileItem item = iter.next() ;
  17. String fieldName = item.getFieldName() ; // 取得表单控件的名称
  18. %>
  19. <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
  20. <%
  21. if(!item.isFormField()){ // 不是普通文本
  22. String fileName = item.getName() ; // 取得文件的名称
  23. String contentType = item.getContentType() ; // 文件类型
  24. long sizeInBytes = item.getSize() ;
  25. %>
  26. <li>上传文件名称:<%=fileName%>
  27. <li>上传文件类型:<%=contentType%>
  28. <li>上传文件大小:<%=sizeInBytes%>
  29. <%
  30. } else {
  31. String value = item.getString() ;
  32. %>
  33. <li>普通参数:<%=value%>
  34. <%
  35. }
  36. %> </ul>
  37. <%
  38. }
  39. %>
  40. </body>
  41. </html>

组件上传代码实例二

  1. <html>
  2. <head><title>commons-FileUpload组件上传</title></head>
  3. <body>
  4. <form action="fileupload_demo02.jsp" method="post" enctype="multipart/form-data">
  5. 姓名:<input type="text" name="uname"><br>
  6. 照片:<input type="file" name="pic1"><br>
  7. 照片:<input type="file" name="pic2"><br>
  8. 照片:<input type="file" name="pic3"><br>
  9. <input type="submit" value="上传">
  10. <input type="reset" value="重置">
  11. </form>
  12. </body>
  13. </html>

JSP代码

  1. <%@ page contentType="text/html" pageEncoding="GBK"%>
  2. <%@ page import="java.util.*,java.io.*"%>
  3. <%@ page import="org.apache.commons.fileupload.*"%>
  4. <%@ page import="org.apache.commons.fileupload.disk.*"%>
  5. <%@ page import="org.apache.commons.fileupload.servlet.*"%>
  6. <%@ page import="cn.mldn.lxh.util.*"%>
  7. <html>
  8. <head><title>commons-fileUpload组件上传实例二</title></head>
  9. <body>
  10. <%
  11. DiskFileItemFactory factory = new DiskFileItemFactory() ;
  12. factory.setRepository(new File(this.getServletContext().getRealPath("/") + "uploadtemp")) ; // 更准确的说是一个临时文件
  13. ServletFileUpload upload = new ServletFileUpload(factory) ;
  14. upload.setFileSizeMax(3 * 1024 * 1024) ; // 只能上传3M
  15. List<FileItem> items = upload.parseRequest(request) ; // 接收全部内容
  16. Iterator<FileItem> iter = items.iterator() ;
  17. IPTimeStamp its = new IPTimeStamp(/* request.getRemoteAddr() */) ;
  18. while(iter.hasNext()){
  19. FileItem item = iter.next() ;
  20. String fieldName = item.getFieldName() ; // 取得表单控件的名称
  21. %>
  22. <ul><h4><%=fieldName%> --> <%=item.isFormField()%></h4>
  23. <%
  24. if(!item.isFormField()){ // 不是普通文本
  25. File saveFile = null ;
  26. InputStream input = null ;
  27. OutputStream output = null ;
  28. input = item.getInputStream() ;
  29. output = new FileOutputStream(new File(this.getServletContext().getRealPath("/")+"upload"+File.separator+its.getIPTimeRand()+"."+item.getName().split("\\.")[1])) ;
  30. int temp = 0 ;
  31. byte data[] = new byte[512] ;
  32. while((temp=input.read(data,0,512))!=-1){
  33. output.write(data) ; // 分块保存
  34. }
  35. input.close() ;
  36. output.close() ;
  37. } else {
  38. String value = item.getString() ;
  39. %>
  40. <li>普通参数:<%=value%>
  41. <%
  42. }
  43. %> </ul>
  44. <%
  45. }
  46. %>
  47. </body>
  48. </html>

注意:本代码在建立项目时需要在项目名称下创建upload文件夹才能正常运行。

FileUpload组件的不便之处:

  1. 无法像使用request.getParameter()方法那样准确的取得提交的参数;
  2. 无法像使用request.getParameterValues()那样准确的取得一组提交参数;
  3. 所有的上传文件都需要进行依次的判断,才能够分别保存,不能一次性批量保存。

java基础篇---文件上传(commons-FileUpload组件)的更多相关文章

  1. java基础篇---文件上传(smartupload组件)

    文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本篇主要说明smartupload组件上传. 在讲解smartupload上传前,我们先来看看不使用 ...

  2. java基础篇---文件上传(组件)

    转载自:http://www.cnblogs.com/oumyye/p/4234969.html 文件上传几乎是所有网站都具有的功能,用户可以将文件上传到服务器的指定文件夹中,也可以保存在数据库中,本 ...

  3. JAVA基础篇—文件上传下载

    /index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pa ...

  4. .JavaWeb文件上传和FileUpload组件使用

    .JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...

  5. 文件上传 - Commons FileUpload介绍

    概述 FileUpload能够以多种不同的方式使用,具体取决于应用程序的要求.在最简单的情况下,调用单个方法来解析servlet请求,然后处理解析出来的Item集合.此外也可以自定义FileUploa ...

  6. java支持断点续传文件上传和下载组件

    java两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接 ...

  7. 文件上传使用FileUpload组件进行代码实现

    使用FileUpload组件进行代码实现 实现步骤 1. 获取解析器工厂: DiskFileItemFactory 2. 获取解析器对象: ServletFileUpload 3. 解析request ...

  8. Java中实现文件上传下载的三种解决方案

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  9. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

随机推荐

  1. C# 使用系统方法发送异步邮件

    项目背景: 最近在对几年前的一个项目进行重构,发现发送邮件功能需要一定的时间来处理,而由于发送是同步的因此导致在发送邮件时无法执行后续的操作 实际上发送邮件后只需要将发送结果写入系统日志即可对其他业务 ...

  2. 【Oracle】详解Oracle中NLS_LANG变量的使用

    目录结构: contents structure [+] 关于NLS_LANG参数 NSL_LANG常用的值 在MS-DOS模式和Batch模式中设置NLS_LANG 注册表中NLS_LANG和系统环 ...

  3. 【struts2】名为dispatcher的ResultType

    1)基本使用 名称为“dispatcher”的ResultType,在struts-default.xml里的配置如下: <result-type name="dispatcher&q ...

  4. 【Linux】统计命令wc

    如果我想要知道 /etc/man.config 这个文件里面有多少字?多少行?多少字符的话, 可以怎么做呢?其实可以利用 wc 这个命令来达成喔!他可以帮我们计算输出的信息的整体数据! [root@w ...

  5. mysql 创建函数问题

    ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declar ...

  6. 《TCP/IP详解卷1:协议》读书笔记

    <TCP/IP详解卷1:协议>读书笔记 - QingLiXueShi - 博客园https://www.cnblogs.com/mengwang024/p/4425834.html < ...

  7. springcloud中概念辨析

    1 什么是微服务? 微服务架构是一种架构模式或者一种架构风格,他提倡将单一应用程序划分成一组小的服务,每个服务运行在独立进程中,服务之间相互协调.相互配合.服务之间采用轻量级的通信机制(一般是基于HT ...

  8. MySql(十二):MySql架构设计——可扩展设计的基本原则

    一.前言 科技在发展,硬件设备的发展渐渐无法满足应用系统对处理能力的要求.不过,我们还是可以通过改造系统的架构体系,提升系统的扩展能力,通过组合多个低处理能力的硬件设备来达到一个高处理能力的系统,也就 ...

  9. JavaScript权威指南第02章 词法结构

    词法结构 2.1字符集 JavaScript 是Unicode字符集编写,差点儿支持地球上全部的语言. 2.1.1区分大写和小写 javascript是区分大写和小写的语言. 2.1.2 空格.换行符 ...

  10. Recyclerview 出现 java.lang.IndexOutOfBoundsException: Inconsistency detected 异常

    使用 RecyclerView 的时候报错 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid view hold ...