AlanXUpload是一个通过flash技术提供批量上传文件的web批量上传组件,用户可以自定义上传的文件类型、大小、数量,上传的地址,上传的处理方式,自定义上传UI,接受服务器发送的反馈信息,并显示所有文件及单个文件的上传进度。
AlanXUpload 采用的是最宽松的MIT许可证
主要功能:
· 可一次性选择200到1000个文件批量上传
· 可在选择前指定文件格式(如:”.xls;.doc”)和大小
· 单个文件大小允许最到到100M,多个文件大小可达1G
· 可实时显示当前在批量上传的文件总大小和总数及进度条
· 可实时显示单个文件的总大小和以上传大小及进度
使用说明
首先,请保证你的工程中有common-fileupload-1.x.x.jar和common-io-1.x.x.jar(可到apache.org下载,但这不是必须的,将来我会会在文档中说明,什么情况下,不需要依赖其他的jar包)
1. 其中AlanX1.0.jar中包含了java源代码,请把它copy到你的工程的WEB-INF > lib文件夹中
2. 将AlanX放入你现在工程的web目录的根目录下,与WEB-INF同级
放在根目录下,与WEB-INF同级
3.在web.xml加入如下代码:
<servlet>
<description>AlanX.cn Batch Upload Sample</description>
<display-name>AlanXUploadServlet</display-name>
<servlet-name>AlanXUploadServlet</servlet-name>
<servlet-class>cn.alanx.upload.sample.AlanXUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AlanXUploadServlet</servlet-name>
<url-pattern>/AlanXUploadServlet</url-pattern>
</servlet-mapping>
4.将 AlanXUpload.tld 文件放在WEB-INF目录或其子目录中
5.在需要上传的jsp页面加入如下红色代码:
<%@ taglib prefix=”ax” uri=”/WEB-INF/tlds/AlanXUpload.tld” %>
<%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>My JSP ‘index.jsp’ starting page</title>
<ax:head/>
</head>
<body>
<ax:body/>
</body>
</html>
6.
注意
1.AlanXUpload.tld的目录与下面相对应
2. <ax:head/> 必须放在<head><head/>中,<ax:body/> 必须放在<body></body>中
以上几点是官方文档中说明的,本人在使用中发下<ax:head/>和<ax:body/>有诸多的不便,查看源码,把这两个标签去掉,换成代码,就方便的多了,以下是代码,只要添加到合适位置就行了,没有位置限制:
<td width="100%">
<div>
<div id="AlanX">
<p>
如果您看到这段文字,说明可能出现如下情况
</p>
<p>
1.flash插件版本太低,需要升级到至少9.0.0版本
</p>
<p>
2.参数配置有错误
</p>
</div>
</div>
<script type="text/javascript" src="<%=request.getContextPath() %>/AlanX/swfobject.js">
</script>
<script type="text/javascript">
var flashvars = {};
flashvars.uploadUrl = "<%=request.getContextPath() %>/url……";
flashvars.extensionName = "*.*";
flashvars.extensionDisp = "AlanX上传组件";
flashvars.maxFileN = 100;
flashvars.maxFileSize = 104857600;
flashvars.maxAllFileSize = 10485760001048576000;
flashvars.waitForProgress = "false";
flashvars.errorContinue = "true";
flashvars.showLogoTxt = "true";
var params = {};
var attributes = {};
swfobject.embedSWF("<%=request.getContextPath() %>/AlanX/AlanX.swf", "AlanX", "500", "40", "9.0.0",
"<%=request.getContextPath() %>/AlanX/expressInstall.swf", flashvars, params, attributes);</script>
此外还应注意
1、flash脚本是另外重新启动一个连接,不会传递session,
解决方法是你把sessionid传过去
2、传递参数的时候只能传递一个,不能用"&"符号,我开发的时候是这样的,希望以后版本改正这个问题
Struts2中使用
只需在Action中声明下面几个变量,并生成get 、set方法就行了 。
private File Filedata;
private String FiledataContentType;
private String FiledataFileName;
private String Filename;
private String Upload;
在Struts2中我们看到的是单个对象,而不是数组,所以在使用其实就是重复调用strut2,比较占用资源。
总之批量上传还是要慎用,要控制最多文件的个数和大小。