版本是v3.2.1
$(function() {
$('#file_upload').uploadify({'formData' : {'sessionUser':'<%=((TbUser)session.getAttribute("sessionUser")).getUserId() %>',
'uploadParm':'1'},// sessionUser参数为固定且必有参数,uploadParm...可以放置其他参数
'fileSizeLimit' : 10*1024, //大小限制:10M
'fileTypeDesc' : '支持格式:xls', //如果配置了以下的'fileExt'属性,那么这个属性是必须的
'fileTypeExts' : '*.xls',//允许的格式
'fileObjName' : 'file_upload',//和input的name属性值保持一致就好,与Struts2中的变量名一致
'swf' : '<%=path %>/uploadify/uploadify.swf',
'uploader' : '<%=path%>/graduate/graduateUploadFile.action;jsessionid=<%=session.getId()%>', //提交地址
'method' : 'get',
'multi' : true,//是否允许多个上传
'uploadLimit' : '10',//最多上传文件数量
'successTimeout' : '300',//设置超时时间,默认为30(秒)
//'removeTimeout' : '120',//多久移除上传显示条
'buttonText' : '请选择文件',
'onSelectError' : function (file,errorCode,errorMsg) {
this.queueData.errorMsg='文件错误!文件格式需为.xls,大小不超过10M,每次最多允许上传1个,请重新选择。';
} ,
'onQueueComplete' : function (stats) { //当队列中的所有文件全部完成上传时触发
getFieldList();
//alert("成功上传的文件数:" + stats.uploadsSuccessful + " -上传出错的文件数:"+ stats.uploadsErrored + " -上传的文件总大小:" + stats.uploadSize);
//},
//'onUploadError' :function (file , errorCode, errorMsg , errorString) { //每个文件上传出错时触发
// alert("id:" + file.id + " -索引:" + file.index + " -文件名称:" + file.name + " -文件大小:" + file.size + " -文件类型:" + file.type + " -创建日期:" + file.creationdate + " -修改日期:" + file.modificationdate + " -文件状态:" + file.filestatus + " –错误代码:" + errorCode + " –错误描述:" + errorMsg + " –简要错误描述:" + errorString);
}
});
});
动态参数设置方法:
'onUploadStart': function (file) {
$("#file_upload").uploadify("settings", "formData", { 'sessionUser':'<%=((TbUser)session.getAttribute("sessionUser")).getUserId() %>', 'uploadParm':$("#colname").val()});
}
另外在上传中遇到了session丢失问题:
以下是java解决方法,转自:http://blog.youkuaiyun.com/superdog007/article/details/16804253
备注:我只用了;jsessionid=<%=session.getId(%>,另外需要注意的是,需要重启浏览器
uploadify上传用的是一个flash插件。
flash中有个bug就是自身创建一个session,这样就导致与web本身的session不一致 权限验证失败的问题。 就是这个问题 让我花了好多时间来解决
查询百度 、google、以及stackoverflow多日 大都是写php和asp.net中的例子
这让我很头疼,最终在某个博客 看到解决的 问题,经过本人测试 这个解决方法可行,跟大家分享一下 ,以及下次自己碰到一样问题的时候方便查阅
原因:
因为uploadify是不会自动传送session值的,所以当session被拦截后,它的请求是发不出去的(补充,还有一种情况就是uploaddify是使用flash来处理文件文件上传,而在在非IE浏览器(Firefox,Chrome)下使用flash方式向服务器发起请求,是会新生成一个session的(此时旧的session则丢失了),如果要避免这个问题,需要把当前的sessionId作为形参传给servlet类);
解决方法:
- $("#uploadify").uploadify({
- 'swf' : basePath+'js/component/uploadify/js/uploadify.swf',
- 'uploader' : 'uploadFile.action;jsessionid=<%=session.getId(%>', // 上传到后台的处理类
- 'cancelImg' : [b][b][/b][/b]basePath+'js/component/uploadify/img/uploadify-cancel.png', // 取消按钮的图片
- 'fileObjName' : 'uploadify', // 传到后台的对象名
- 'queueID' : 'fileQueue',
- 'fileSizeLimit' : '8589934592', // 限制文件上传的大小
- 'formData' :{'userId':userId},
- 'progressData' : 'percentage', //有speed和percentage两种,一个显示速度,一个显示完成百分比
- 'buttonText' : '添加附件', // 按钮上的文字
- 'auto' : false, // 是否自动上传
- 'multi' : false, // 是否支持多文件上传
- 'removeComplete': false,
- 'onQueueComplete' : function (queueData){
- alert("上传完毕!");
- }
- });
补充:uploadify上传时,只要一初始化就会发出一个请求,而这个请求是当前页面的地址,
解决方法是:
将jquery.uploadify.min.js(我用的版本是3.2)原来的代码:
- 1 this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url)
替换为:
1 this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
this.settings.button_image_url =
this.settings.button_image_url ? SWFUpload.completeURL(this.settings.button_image_url)
: this.settings.button_image_url;