浅谈 COMMON-FILEUPLOAD1.1 的使用

原创 2006年05月21日 10:11:00

         搞WEB开发,上传下载这个功能是必不可少的,jsp自身没有带这个组件,只能靠我们自己写了,不过毕竟对于新手来讲,能力有限,只好借助别人了,现在网上关于上传的组件也不少,在这里我选择的是apache的COMMON-FILEUPLOAD1.1,与 COMMON-FILEUPLOAD1.0相比,使用方法略有不同,网上很多教程是关于1.0的,如果你在用1.0的方法使用1.1的版本,可能会出现些错误,我本人就是一个典型,呵呵.
         长话短说,搞我们这个的都不喜欢看文字的了,要不然我还想开个文学专栏呢,呵呵!

配置方法一(按1.0的使用方法,本人不推荐,但还是拿出来写写):

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import ="java.util.regex.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%

//(要配合org.apache.commons.io使用,记得去下这个包,不太方便,所以本人不推荐使用)

//如果不下这个包,在程序执行到下面的 List fileItems = fu.parseRequest(request); 时会出错
    DiskFileUpload fu = new DiskFileUpload();
 // 设置允许用户上传文件大小,单位:字节
    fu.setSizeMax(1024*1024*100);
 
    // 设置最多只允许在内存中存储的数据,单位:字节
    fu.setSizeThreshold(4096);
 
   // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
    fu.setRepositoryPath(application.getRealPath("//") + "temp//");
 
 //开始读取上传信息
    List fileItems = fu.parseRequest(request);
 
 // 依次处理每个上传的文件                                   
    Iterator iter = fileItems.iterator();
 
 //正则匹配,过滤路径取文件名
   String regExp=".+////(.+)$";
  
    //过滤掉的文件类型
   String[] errorType={".exe",".com",".cgi",".asp"};
    
   Pattern p = Pattern.compile(regExp);
    while (iter.hasNext()) {
    FileItem item = (FileItem)iter.next();
    //忽略其他不是文件域的所有表单信息
       if (!item.isFormField()) {
           String name = item.getName();
           long size = item.getSize();
           if((name==null||name.equals("")) && size==0)
               continue;
        Matcher m = p.matcher(name);
       boolean result = m.find();
       if (result){
           for (int temp=0;temp<errorType.length;temp++){
           if (m.group(1).endsWith(errorType[temp])){
                 throw new IOException(name+": wrong type");
           }
           }
           try{
 
           item.write(new File("E://" + m.group(1)));

           out.print(name+"&nbsp;&nbsp;"+size+"<br>");
           }
           catch(Exception e){
             out.println(e);
           }

        }
       else
       {
         throw new IOException("fail to upload");
       }
       }
   }
%>

配置方法二(推荐):

//以下代码是参考javadoc写的,本人测试运行通过,推荐使用该方法,不然用1.1就没意义了

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="org.apache.commons.fileupload.disk.*"%>
<%@ page import="org.apache.commons.fileupload.servlet.*"%>
<%
        DiskFileItemFactory factory = new DiskFileItemFactory();
  //设置内存区块大小   
        factory.setSizeThreshold(4096);
        // the location for saving data that is larger than getSizeThreshold()
        factory.setRepository(new File(application.getRealPath("//") + "temp//"));

        ServletFileUpload upload = new ServletFileUpload(factory);
        // maximum size before a FileUploadException will be thrown
        upload.setSizeMax(1024*1024*100);

        List fileItems = upload.parseRequest(request);
        // assume we know there are two files. The first file is a small
        // text file, the second is unknown and is written to a file on
        // the server
        Iterator i = fileItems.iterator();
  while(i.hasNext()){
     //   String comment = ((FileItem)i.next()).getString();//存数据库用
        FileItem fi = (FileItem)i.next();
  // filename on the client
        String fileName = fi.getName();
  File tempFile = new File(fileName);
  fileName = tempFile.getName();
        // save comment and filename to database//存入数据库
        // write the file
        fi.write(new File(application.getRealPath("//") + "temp//", fileName));
  }
%>

其他废话我不说了,记得下相应的包,然后放入对应的classpath下

浅谈人工智能

历史      各个文明中都有杰出的工匠发明了自动机器来代替人类劳动,早在春秋时期鲁班就发明了世界上第一个机器人,可在空中飞翔‘三日不下’;三国时期蜀汉的诸葛亮发明了‘木牛流马’来运送战备物资,称得上...
  • oba_gaga
  • oba_gaga
  • 2016年10月09日 20:57
  • 4240

浅谈redis

Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。 Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据库完全保存...
  • qq_37610423
  • qq_37610423
  • 2017年05月24日 15:07
  • 664

小白学《神经网络与深度学习》笔记之一-计算机的潜意识:浅谈神经网络-从神经元到深度学习

转载:http://www.cnblogs.com/subconscious/p/5058741.html 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网...
  • yingwei13mei
  • yingwei13mei
  • 2016年12月15日 21:35
  • 516

浅谈JavaScript中创建对象的几种方式

js中没有类的概念,那么怎么创建对象呢?下面一一来细说! 1、创建Object的实例 var person = new Object(); person.name = "Alice"; person...
  • zhouziyu2011
  • zhouziyu2011
  • 2016年10月14日 09:05
  • 267

浅谈人工智能:现状、任务、构架与统一 | 正本清源

朱松纯   加州大学洛杉矶分校UCLA 统计学和计算机科学教授 视觉、认知、学习与自主机器人中心主任 VCLA@UCLA   2017年11月02日 刊登于 《视觉求索》微信公众号 目...
  • x32sky
  • x32sky
  • 2017年11月03日 17:37
  • 1697

单片机调试——《浅谈工程师的调试法宝(四)——RTT的应用》

摘要: 我们前三篇的文档中介绍的调试方法,都因为各种原因而不能在所有的MCU上做到通用,而今天这一切将发生改变。现在就一起来看一下这个神奇的调试工具-RTT。 RTT( Real Time T...
  • Maple_Leaf_15
  • Maple_Leaf_15
  • 2016年03月30日 22:19
  • 1717

林建:计算机专业学习浅谈

一、广泛了解,从科普书籍开始 选择计算机专业的同学,也许是因为原先有一定的基础,也许是因为一时的激情,但更多的人,可能对自己的选择没有深刻的认识,或多或少对计算机专 业有一些神秘的感觉。自己究竟...
  • yang_yulei
  • yang_yulei
  • 2014年10月13日 23:19
  • 1004

Spring浅谈

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建。简单来说,Spring是一个开源的控制反转(Inversion of Con...
  • Gane_Cheng
  • Gane_Cheng
  • 2016年10月09日 21:30
  • 3062

浅谈AngularJS

个人博客搭建完成,欢迎大家来访问哦 黎默丶lymoo的博客 博主最近了解学习了一下angularJS,记录一下心得给大家分享一下...
  • github_37582965
  • github_37582965
  • 2017年04月20日 09:17
  • 734

软件工程之浅谈

      发展至今,软件生产的发展经过了程序设计、程序系统、软件工程三个阶段;其中软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术方面,主要是研究软件开发方法、软件开发过程...
  • sunny19890816
  • sunny19890816
  • 2010年07月01日 23:18
  • 312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈 COMMON-FILEUPLOAD1.1 的使用
举报原因:
原因补充:

(最多只允许输入30个字)