struts1.2下实现文件上传进度条

44 篇文章 2 订阅
41 篇文章 1 订阅
本文详细介绍了在Struts1.2环境下,结合DWR和AJAX实现文件上传进度条的步骤。包括客户端配置、服务器端代码修改以及相关依赖的介绍。通过修改CommonsMultipartRequestHandler.java文件并使用UploadListener和MonitoredDiskFileItemFactory,实现了上传进度的监听。
摘要由CSDN通过智能技术生成

标题:struts1.2下实现文件上传进度条

作者:lee353086(kagula)
最后修改日期:2007-11-23

内容概要:
    本文只是对《采用dwr+ajax和struts开发文件上传进度条》细节的补充,有些内容不在熬述。
    本文分两部份:client部份和server部份。

阅读对象:
    知道有种语言叫java,并已阅读《采用dwr+ajax和struts开发文件上传进度条》的程序员。

实现环境(或依赖包):
[1]MyEclipse5.1.1
[2]JDK 1.5.x
   java代码在1.4兼容模式下编译
[3]springside-2.0-RC1-allinone包
[4]struts-1.2.7-src.zip包
[5]ajax-upload-1.0.war包
[6]一个WebProject with struts 1.2,从MyEclipse5.1.1中创建。

正文:
    client端部份
    请你先打开ajax-upload-1.0.war包,了解下ajax-upload-1.0的结构
    [1]把jaax-upload-1.0中的resource,copy到你的WebProject中的Webroot下
    [2]jaax-upload-1.0中的WEB-INF/lib,copy到你的WebProject
    [3]jaax-upload-1.0中的WEB-INF/dwr.xml到你的WebProject的WEB-INF下
    [4]注意下jaax-upload-1.0中的WEB-INF/web.xml,因为你的WebProject的web.xml要依照这个文件修改。
    [5]jaax-upload-1.0中的ajax-upload.iml、ajax-upload.ipr、ajax-upload.iws,copy到你的WebProject中的Webroot下
    [6]请理解jaax-upload-1.0中的index.jsp 特别是以下几行代码的含义,因为你很可能会用的着,调整进度条的风格。
        <style type="text/css">
            body { font: 11px Lucida Grande, Verdana, Arial, Helvetica, sans serif; }
            #progressBar { padding-top: 5px; }
            #progressBarBox { width: 350px; height: 20px; border: 1px inset; background: #eee;}
            #progressBarBoxContent { width: 0; height: 20px; border-right: 1px solid #444; background: #9ACB34; }
        </style>
    [7]请你也理解index.jsp中的下面这段代码,决定把自己的进度条,放在html的哪里
        <div id="progressBar" style="display: none;">

            <div id="theMeter">
                <div id="progressBarText"></div>

                <div id="progressBarBox">
                    <div id="progressBarBoxContent"></div>
                </div>
            </div>
        </div>
    [8]你可能也需要看懂,resources/js/upload.js文件,比如增加下面代码
function disableSubmit()
{
    var allInputs = document.forms[0].tags('INPUT');
    for( var k = 0; k < allInputs.length; k++ )
    {
      if( allInputs[k].type == "submit" )
      {
          allInputs[k].disabled = true;
      }  
    }
}
      然后在,function startProgress()中调用。使任何submit类型的标签,在用户点击[上传文件]后,被禁止。
      下面,这段代码在function updateProgress中调用。如果你需要调整代码,在文件上传过程中,禁止用户使用
      submit、file、button类型的input标签。那就用的着下面这段代码了。
function disableButton()
{
    var allInputs = document.forms[0].tags('INPUT');
    for( var k = 0; k < allInputs.length; k++ )
    {
      if( allInputs[k].type == "submit" )
      {
          allInputs[k].disabled = true;
      }
      if( allInputs[k].type == "file" )
      {
          allInputs[k].disabled = true;
      }
      if( allInputs[k].type == "button" )
      {
          allInputs[k].disabled = true;
      }   
    }
}
   [9]upload.js文件的其余部份代码,也值得你花几分钟时间,去理解。这对你调整进度条风格有帮助。
   [10]jaax-upload-1.0中的WEB-INF文件夹下的src,copy到你的WebProject中。
      在修改struts代码的时候,你会看下源代码src/be/telio/mediastore/ui/upload下的java文件。
   [11]在知道如何修改index.jsp、upload.js、满足自己的需要,就可以看下文了。

    server端部份
    [1]你得把Webroot/lib/struts.jar删除,因为,我们现在不需要它了。
       现在可以把struts-1.2.7-src包,/src/share目录下的struts源码,copy到你的WebProject下的src
    [2]修改org.apache.struts.upload.CommonsMultipartRequestHandler.java文件中的handleRequest函数。
       参考springside-2.0-RC1-allinone包core/src/java/org/springside/components/ajaxupload目录中的
       AjaxMultipartRequestHandler.java文件的handleRequest函数,做修改,
       你可能会遇到UploadListener、MonitoredDiskFileItemFactory没办法resolved的问题,没关系
       你可以在be.telio.mediastore.ui.upload包(我们在ajax-upload-1.0/WEB-INF/src中提到过)中发现它们。
       或你可以参考下面,这个代码片段修改。
    public void handleRequest(HttpServletRequest request)
            throws ServletException {

        // Get the app config for the current request.
        ModuleConfig ac = (ModuleConfig) request.getAttribute(
                Globals.MODULE_KEY);
       
  UploadListener listener = new UploadListener(request, 30);
  // Create a factory for disk-based file items
  DiskFileItemFactory factory = new MonitoredDiskFileItemFactory(listener);
  // Create a new file upload handler
  ServletFileUpload upload = new ServletFileUpload(factory);
  
        // The following line is to support an "EncodingFilter"
        // see http://nagoya.apache.org/bugzilla/show_bug.cgi?id=23255
        upload.setHeaderEncoding(request.getCharacterEncoding());
        // Set the maximum size before a FileUploadException will be thrown.
        upload.setSizeMax(getSizeMax(ac));
       
        // Set the maximum size that will be stored in memory.
//        upload.setSizeThreshold((int) getSizeThreshold(ac));
        // Set the the location for saving data on disk.
//        upload.setRepositoryPath(getRepositoryPath(ac));

        // Create the hash tables to be populated.
        ...omit by myself for you need not know it...
    }
    [3]修改你Webproject中的web.xml文件


   现在可以测试你的WebProject了!

TERM(名词解释):
[1]WebProject   是你在MyEclipse5.1.1中创建的WebProject类型的项目,并已添加struts1.2框架支持。
[2]html         指的是符合html格式标准的任何文件。

REMARK(备注):
[1]你可能可以使用其它版本的依赖包、你或许有更好的办法或途径,达到你想要的效果,但这不在本文之列。


相关网站列表
[1]《采用dwr+ajax和struts开发文件上传进度条》
http://blog.csdn.net/volcano_hosan/archive/2007/03/01/1518217.aspx
[2]struts-1.2.7-src.zip包,下载地址
http://archive.apache.org/dist/struts/
[3]springside-2.0-RC1-allinone包,下载地址
http://www.springside.org.cn/

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值