Java解决火狐浏览器使用uploadify上传报错302以及报IO error错问题

时间:2022-01-05 08:22:32

最近使用同时添加的上传控件uploadify,可以支持批量上传,但是控件是用Flash做的,在IE、360浏览器还好,但是在火狐浏览器出现了上传报错Http error 302,网上查询到是因为由于jquery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但 firefox、chrome不会这样做,他们会认为这样不安全。在火狐浏览器下 uploadify 利用flash进行post上传时没有包含原来的session信息,而是重新创建了一个session,新的session无法通过登录验证,因此就会报错302。

网上说的解决办法是在uploader属性后面将session追加进去

;jsessionid=<%=session.getId()%>
,代码如下:

<input id="testFileInput" type="file" name="strFilePath"  uploaderOption="{swf:'${ctx}/static/styles/management/uploadify/scripts/uploadify.swf',
uploader:'${ctx}/common/uploadFile;jsessionid=<%=session.getId()%>',
formData:{id:'${task.id}', ajax:1},
queueID:'fileQueue',
buttonImage:'${ctx}/static/styles/management/uploadify/img/add.jpg',
buttonClass:'my-uploadify-button',
width:102,
auto:true,
removeCompleted:false
}"/>

但是我这样试过了还是解决不了问题,依然报错302.当时很是郁闷。

然后我还了一种思路,将session的值保存在页面中,然后在JavaScript中直接获取,这样一试,就成功了。

具体做法,我在导航栏总页面进行session的保存,

<input id="sessionId" type="hidden" value="${pageContext.session.id}"/>

然后在JavaScript中将其值获取

/**
* 上传图片公共方法
* @param fileID 上传文件按钮的ID值
* @param imgID 上传后图片预览img的ID值
* @param nameValue uploadfile中bean属性的ID值,用于传入后台
* @param divShowId 之前隐藏的DIV用于显示图片的将其展示出来
*/
function uploadFileUtil(fileID,imgID,nameValue,divShowId){
$("#"+fileID).uploadify({
height : 20,
swf :basePath+'/page/js/uploadify/uploadify.swf',
uploader :basePath+'/admin/product/upload.do;jsessionid=' + sessionId,
buttonText:"选择文件",
width : 60,
queueSizeLimit :1,
'onUploadSuccess' : function(file, data, response) {
//alert(data);
var mixed=data.split(",");
var id=mixed[0];
var imgPath=mixed[1];
$("#"+imgID).attr("src","/"+replaceImgURL(imgPath));
/* $(singlePicShow).append($("#singlePic")); */
$("#"+nameValue).val(id);
$("#" + divShowId).show();
/* var img = $('#imgdiv1')
img.attr('display:block') */
}
});
}

这样就不保错了,如果更改后出现上传报错IO error的话,将火狐浏览器关掉,清空缓存,然后再打开试试,应该就好了。