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

标题: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/

你可能感兴趣的:(struts1)