原因:
uploadify是一个基于flash的上传文件的插件,由于,火狐浏览器在使用flash的post方法时,会生成新的session导致上传失败。
解决:
在页面加一个隐藏域,保存新session之前的sessionId。
HTML代码:
<input type="hidden" id="sessionId" value="${pageContext.session.id}" />
<div id="upDataArea">
<div id="alertArea"></div>
<form id="filecondition" class="s_span" method = "post" enctype = "multipart/form-data">
<div id="attachfileQueue" style="width:500px;"></div>
<input type="file" id="aa" name="file"/>
<input id="upload" type="button" value="" οnclick="javascript:$('#aa').uploadify('upload', '*')"/>
<input id="cancel" type="button" value="" οnclick="javascript:$('#aa').uploadify('cancel', '*')"/>
</form>
<button id="close" onclick = "closeUploadify()" ></button>
<div id="some_file_queue"></div>
</div>
JavaScript代码:
$("#aa").uploadify({
'uploader':'<%=request.getContextPath()%>/requestAction!ajaxRequest.action?authority_id=080&sessionId='+$('#sessionId').val(),
'swf': '<%=request.getContextPath()%>/common/js/uploadify/uploadify.swf',
'queueID':'some_file_queue',
'auto': false,
'multi': true,
'buttonText':'',
'removeTimeout':0.5,
'width': 100,
'fileObjName' : 'file',
'fileTypeDesc' : '支持格式:*.xml',
'fileTypeExts' : '*.xml', //控制可上传文件的扩展名,启用本项时需同时声明fileDesc
'onUploadSuccess' : function(file, data, response){
console.log(data);
//response不能作为判断条件,无论成不成功都是true
var v_result = eval("("+data+")");
if(v_result.status == "success"){
alert("上传文件成功");
create();
closeUploadify();
}else{
alert("Sorry,您上传的文件名称不规范 请遵循P_XXX_XXX_XXX.xml");
}
},
'onUploadStart': function(file) {
$("#aa").uploadify("settings", 'formData', {'parameter': file.name});
},
'onFallback':function(){
//在初始化时检测不到浏览器有兼容性的flash版本时实触发
$("#alertArea").html("您没有安装flash!该功能不能使用!");
//alert("您没有安装flash!");
}
});
后端:
根据前端传过来的sessionId,拿到新会话之前的session信息,比如登录信息之类,绑定到action里,做验证等。