Smartupload和commons-fileupload介绍与比较(ZT)

本文对比了smartupload和commons-fileupload两种文件上传组件的使用方法及优缺点。smartupload适合小文件上传,但处理大文件或多文件时可能引起资源占用过高;commons-fileupload则通过临时文件的方式有效避免了这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WEB文件上传可能是网站建设中最常用的功能之一,我在项目开发中几乎都需要实现文件上传功能.前段时间自己搜集了一些上传组件.这篇文章中将介绍这些组件的使用方法,并且比较各自的优劣.

一,smartupload组件.

我想只要做个文件上传的朋友都知道这个组件,smartupload这个组件上传相对较小的文件时是个不错的选择.下面给出个使用的例子:

<%@ page contentType="text/html;charset=gb2312"%><%@ page import="java.sql.*"%><%@ page import="com.jspsmart.upload.*" %>

<%  

//实例化上载bean   

SmartUpload mySmartUpload=new SmartUpload();   

 //初始化    mySmartUpload.initialize(pageContext);    

 //设置上载的最大值,注意:如果这里设置过大会出现问题!   

mySmartUpload.setMaxFileSize(500 * 1024*1024);   

//上载文件    mySmartUpload.upload();  

//循环取得所有上载的文件  

    for (int i=0;i<mySmartUpload.getFiles().getCount();i++){  

        //取得上载的文件  

        com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);  

        if (!myFile.isMissing())    {  

              //取得上载的文件的文件名   

             String myFileName=myFile.getFileName();   

            //取得不带后缀的文件名   

            String  suffix=myFileName.substring(0,myFileName.lastIndexOf('.'));   

           //取得后缀名   

           String  ext= mySmartUpload.getFiles().getFile(0).getFileExt();    

           //取得文件的大小     

            int fileSize=myFile.getSize();   

           //保存路径   

           String aa=getServletContext().getRealPath("/")+"jsp//";   

           String trace=aa+myFileName;   

           //取得别的参数   

           String explain=(String)mySmartUpload.getRequest().getParameter("text");   

           String send=(String)mySmartUpload.getRequest().getParameter("send");   

          //将文件保存在服务器端    

          myFile.saveAs(trace,mySmartUpload.SAVE_PHYSICAL); 

        }

     }  

%>  

但是使用smartupload上传过大文件,或者多文件的时候可能出现CPU或内存占用过高的问题.并且:只有重新启动容器才能恢复正常!这正是我最后我放弃了使用smartupload的原因.

二,commons-fileupload组件

这个组件是我现在使用的组件,下载地址:http://jakarta.apache.org/site/downloads/downloads_commons-fileupload.cgi,包内包含了API文档.

使用该组件的例子:

<%@ page language=“java”contentType=“text/html;charset=GBK”%>

<%@ page import=“java.util.*”%>

<%@ page import=“org.apache.commons.fileupload.*”%>

<html>

    <head>

        <title>文件上传</title>

    </head>

    <% 

        DiskFileUpload fu = new DiskFileUpload(); 

        // 设置允许用户上传文件大小,单位:字节 

        fu.setSizeMax(10000000); 

        // 设置最多只允许在内存中存储的数据,单位:字节 

        fu.setSizeThreshold(4096); 

        // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录 

        fu.setRepositoryPath(“D://Tomcat5//TEMP”); 

        //开始读取上传信息 List fileItems = fu.parseRequest(request); 

        // 依次处理每个上传的文件 

        Iterator iter = fileItems.iterator(); 

        while (iter.hasNext()) { 

             FileItem item = (FileItem) iter.next(); 

            //忽略其他不是文件域的所有表单信息 

            if (!item.isFormField()) {  

                String name = item.getName();  

                item.write(“D://UploadTest//”+ name); 

            }

       }

    %>

从上面的程序可以看出,该组件上传时候可以用了一个地方来存储临时文件,呆上传完成后直接把文件写过去.这样就不会占用过多的内存!而且该组件上传大文件的时候效率也不低哦!

在这两个的对比选择中,我选择了后者,因为我做的项目中经常上传大于10M的文件,用前者的时候服务器几乎被整崩溃.

http方式传文件效率始终很低,可以考虑使用web方式实现的ftp文件上传。



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=425438


[ 收藏到我的网摘]   [ 发送Trackback]  亮亮雨月发表于 2005年07月15日 10:46:00

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值