<script type="text/javascript" src="js/jquery-1.8.1.min.js"></script>
<script type="text/javascript" src="js/jquery.uploadify.v2.1.4.min.js"></script>
<script type="text/javascript" src="js/swfobject.js"></script>
<link rel="stylesheet" type="text/css" href="js/uploadify.css">
<script type="text/javascript">
$(document).ready(function(){
$("#files").uploadify({
'uploader' : 'js/uploadify.swf',//是组件自带的flash,用于打开选取本地文件的按钮
'script' : 'upload!uploadFiles.action',//处理上传的路径,这里使用Struts2是XXX.action
'cancelImg' : 'js/cancel.png',//取消上传文件的按钮图片,就是个叉叉
'folder' : 'upload',//上传文件的目录,可以不配置
'sizeLimit' : 100*1024*1024,//单个文件的大小,100M
'fileDataName' : 'files',//和input的name属性值保持一致就好,Struts2就能处理了
'auto' : false,//是否选取文件后自动上传
'multi' : true,//是否支持多文件上传
'simUploadLimit' : 5,//每次最大上传文件数,不设置的话默认为999个
'buttonText' : 'browes',//按钮上的文字
'displayData' : 'speed',//有speed和percentage两种,一个显示速度,一个显示完成百分比
'fileDesc' : '支持格式:jpg/gif/jpeg/png/bmp.', //如果配置了以下的'fileExt'属性,那么这个属性是必须的
'fileExt' : '*.*',//允许的格式
'onComplete' : function (event, queueID, fileObj, response, data){
$("#result").html(response); //显示上传成功结果
setInterval("showResult()",2000); //两秒后删除显示的上传成功结果
}
});
});
function showResult(){
$("#result").html("");
}
</script>
</head>
<body>
<table>
<tr colspan="2">
<td align="center"><div id="result"></div></td>
</tr>
<tr colspan="2">
<td align="center"><input type="file" name="files" id="files" /></td>
</tr>
<tr>
<td><input type="button" value="上传" onClick="jQuery('#files').uploadifyUpload()"/></td>
<td><input type="button" value="取消" onClick="jQuery('#files').uploadifyClearQueue()" /></td>
</tr>
</table>
</body>
public class FileAction extends BaseAction{
private List<File> files;
private List<String> filesFileName;
public List<String> getFilesFileName() {
return filesFileName;
}
public void setFilesFileName(List<String> filesFileName) {
this.filesFileName = filesFileName;
}
public List<File> getFiles() {
return files;
}
public void setFiles(List<File> files) {
this.files = files;
}
public String uploadFiles() throws Exception{
//获取当前的路径
String path = request.getServletContext().getRealPath("");
//设置上传之后的文件夹,这个文件夹的命名是自定义的
path = path + "/upload/";
//设置编码方法
response.setCharacterEncoding("utf-8");
//上传到指定地方,名称不变,不过你也可以修改名称
for(int i =0;i<files.size();i++){
String newName = FileRename.ChangeName(filesFileName.get(i));
files.get(i).renameTo(new File(path + newName));
}
// files.renameTo(new File(path+filesFileName));
//页面上提醒
response.getWriter().print("上传成功");
return null;
}
}
publicclass FileRename {
publicstatic String ChangeName(Stringstr){
Stringdate = new SimpleDateFormat("yyyyMMddhhmmss").format(newDate());
//获取最后一个点的位置
intlast = str.lastIndexOf(".");
//除去扩展名的部分
Stringstr_head =str.substring(0,last);
//扩展名部分
Stringstr_type =str.substring(last);
intid = (int) (Math.random()*1000);
str= str_head+ date + id +str_type;
returnstr;
}
}
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstruts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constantname="struts.multipart.saveDir"value="/temp/"></constant>
<constantname="struts.multipart.maxSize"value="3000000000"></constant>
<packagename="file"extends="struts-default">
<actionname="upload"class="file.FileAction"method="uploadFiles"></action>
</package>
</struts>
解析:这个最大值是在struts2的源文件“struts2-core-2.0.11.1.jar\org\apache\struts\
default.properties”中的struts.multipart.maxSize=2097152语句,如果想改大的话,就重新设定它,有两种
方法:
一种是重写:struts.properties文件。
二是在struts.xml中加入常量来改变它如“ Java代码
<constant name="struts.multipart.maxSize" value="10000000" />
当然了,也有struts2的拦截器可以限制文件的类型、大小等,但是当上传文件大小2M后,这个拦截器就不起作用
了,只用小于2M(默认大小)的时候才起作用。那是因为:common-fileupload组件默认最大支持上传文件的大小
为2M,当我们上传大于2M的文件时,就会出现上面所说的异常。是这个异常的发生导致了fileUpload拦截器没有机
会执行,所以看到的是页面没有任何变化,也没有任何提示信息,只是在控制台打印出了上面的那些上传文件过
大的异常。