浅谈 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下

相关文章推荐

Common FileUpload组件的使用!

只需要写一个上传类UploadServlet.java,还需要两个Jsp界面,分别负责上传文件和输出上传是否成功。 还需要在根目录下新建一个文件夹uploads,用于保存上传后文件。 下面...

使用common-fileupload实现文件上传

问题描述:前台通过表单提交文件数据,服务器获取 apache的commons-fileupload : http://commons.apache.org/fileupload/ 解决方案...

使用common-fileUpload制作文件上传

前台页面不用多说  主要是表单中设置 enctype="multipart/form-data" 很重要。 处理上传jsp文件      //判断表单是否是Multipart类型的。这里可以直接...

使用common-fileUpload制作文件上传(DiskFileItemFactory方式)

使用common-fileUpload制作文件上传(DiskFileItemFactory方式) 所需包:commons-fileupload-1.2.1.jar和commons-io-1.3....

Struts2下使用Common-FileUpload实现文件上传

struts2下使用commons-fileupload框架实现文件上传。

使用common-fileUpload实现文件上传

FileUpload上传一个文件的过程中可以分为三个部分:首先,客户端与服务器端建立连接,把要上传的文件生成request数据流。其次服务器端接收request流,将流缓存到内存或磁盘中。当文件过大时...

SSH项目中使用common-fileupload上传文件

今天项目用到了上传,我的数据库中存放的是文件的URL,所以要在后台做一些处理,之前写过几次上传,感觉代码量太大,今天在网上搜索了一下,用common-fileupload上传会简单许多,摸索一下午之后...
  • zw0283
  • zw0283
  • 2015年05月15日 14:51
  • 372

使用common-fileUpload和 Spring中MultipartHttpServletRequest实现文件上传

一、上传对表单的要求 1) 表单的提交方式 :"method=post" 2) 表单的类型 :enctype="multipart/form-data" 3) 上传表单的文件项:xx" /> /...

浅谈FileUpload控件和SWFUpload控件

浅谈FileUpload控件和SWFUpload控件这些天一直在弄文件上传,从中学到了一些知识和大家分享一下,同时也希望大家帮忙指正。先看看FileUpload控件吧,这个一般都比较熟悉,它是VS的一...

使用servlet实现文件上传(用common-fileUpload和common-io包)

用servlet实现文件的上传,这里用到Apache的开源工具:common-fileupload。因为common-fileupload依赖于common-io,所以需要同时下载两个包。 co...
  • FateHJ
  • FateHJ
  • 2016年04月03日 15:07
  • 2038
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈 COMMON-FILEUPLOAD1.1 的使用
举报原因:
原因补充:

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