uploadify上传用的是一个flash插件。
替换为:
flash中有个bug就是自身创建一个session,这样就导致与web本身的session不一致 权限验证失败的问题。 就是这个问题 让我花了好多时间来解决 。
原因:
因为uploadify是不会自动传送session值的,所以当session被拦截后,它的请求是发不出去的(补充,还有一种情况就是uploaddify是使用flash来处理文件文件上传,而在在非IE浏览器(Firefox,Chrome)下使用flash方式向服务器发起请求,是会新生成一个session的(此时旧的session则丢失了),如果要避免这个问题,需要把当前的sessionId作为形参传给servlet类);
$("#uploadifyHtml").uploadify({
'swf' : 'lib/ckeditor/upload/uploadify.swf',
'uploader' : 'uploadHtmlToJava.do;jsessionid=<%=session.getId()%>',//后台处理的请求
'cancelImg' : 'lib/uploadify/uploadify-cancel.png',
'buttonImg' : 'lib/ckeditor/upload/uploadBlue.png',
//'folder' : 'uploads',//您想将文件保存到的路径
'queueID' : 'fileQueue',//与下面的id对应
'progressData':'percentage',
'queueSizeLimit' : 5,
'fileTypeDesc' : 'html文件',
'fileTypeExts' : '*.html;*.htm', //控制可上传文件的扩展名,启用本项时需同时声明fileDesc
'auto' : true,
'multi' : false,
'simUploadLimit' : 1,
'buttonText' : '导入html',
'onQueueComplete' : function(stats) {//当队列中的所有文件全部完成上传时触发
/* alert( '成功上传的文件数: ' + stats.successful_uploads
+ ' - 上传出错的文件数: ' + stats.upload_errors
+ ' - 取消上传的文件数: ' + stats.upload_cancelled
+ ' - 出错的文件数' + stats.queue_errors); */
if(stats.uploadsErrored == 0){
alert('成功上传第' + stats.uploadsSuccessful + '个html文件');
getUploadHtml();
} else {
alert('上传第' + stats.uploadsErrored + '个html文件出错');
}
}
});
});
补充: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