解决Jqueryify插件在火狐,360浏览器无法上传文件问题
反复调试,发现其问题所在:jquery uploadify在ie下可以正常上传,在实现异步上传的时候,每一个文件在上传时都会提交给服务器一个请求。每个请求都需要安全验证,session 和cookie的校验。是的,就是这样。由于jquery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但 firefox、chrome不会这样做,他们会认为这样不安全。哈,这就是原因。
解决办法,在Global.asax.cs文件上面添加这两个方法:
protected void Application_BeginRequest(object sender, EventArgs e) { try { // 解决火狐、360浏览器使用uploadify上传session丢失的问题 string session_param_name = "ASPSESSIONID"; string session_cookie_name = "ASP.NET_SessionId"; if (Request[session_param_name] != null) { UpdateCookie(session_cookie_name, Request[session_param_name]); } string auth_param_name = "AUTHID"; string auth_cookie_name = FormsAuthentication.FormsCookieName; if (Request[auth_param_name] != null) { UpdateCookie(auth_cookie_name, Request[auth_param_name]); } } catch { } } private void UpdateCookie(string cookie_name, string cookie_value) { HttpCookie cookie = Request.Cookies.Get(cookie_name); if (cookie == null) { cookie = new HttpCookie(cookie_name); } cookie.Value = cookie_value; Request.Cookies.Set(cookie); }
页面脚本,第一把当前用户登录的session,cookie信息一起发送到服务器上面验证:
var formData = { AttachmentGuid: AttachmentGuid, ASPSESSIONID: ‘@Session.SessionID‘, AUTHID: ‘@(Request.Cookies[FormsAuthentication.FormsCookieName] == null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)‘ }; $(‘#uploadify‘).uploadify({ ‘formData‘: formData, //发送给后台的其他参数通过formData指定 ‘uploader‘: ‘/SysCommon/AttachmentUpLoad‘, //后台处理的页面 ‘auto‘: false, //选择文件后自动上传 ‘removeCompleted‘: false, //进度条 ‘fileTypeExts‘: ‘*.gif; *.jpg; *.png‘, //允许上传的文件后缀 ‘uploadLimit‘: 1, //允许上传文件数 ‘sizeLimit‘: 3072000, //允许上传文件大小 ‘swf‘: ‘/Scripts/uploadify/uploadify3.2.1/uploadify.swf‘, //指定swf文件 ‘buttonText‘: ‘选择文件‘, //按钮显示的文字 ‘buttonClass‘: ‘uploadify-button‘, //按钮显示的样式 ‘multi‘: true, //设置为true将允许多文件上传 ‘fileTypeDesc‘: ‘上传文件‘, //在浏览窗口底部的文件类型下拉菜单中显示的文本 ‘queueID‘: ‘fileQueue‘, //上传文件页面中,你想要用来作为文件队列的元素的id, 默认为false 自动生成,不带# ‘onComplete‘: function (event, queueID, fileObj, response, data) { //当单个文件上传完成后触发 console.log("msg:单个文件上传。") var json = eval("(" + response + ")"); console.log(json); console.log(response); console.log(fileObj); console.log(event); console.log(data); }, ‘onSelect‘: function (file) { //选择文件后向队列中添加每个上传任务时都会触发。 console.log("msg:选择文件后向队列中添加每个上传任务。") console.log(file) }, ‘onSelectError‘: function () { //选择文件返回错误时触发该事件。每一个文件返回错误都会触发该事件。 console.log("msg:选择文件返回错误时触发该事件。每一个文件返回错误都会触发该事件。") }, ‘onCancel‘: function (file) { //当点击文件队列中文件的关闭按钮或点击取消上传时触发,file参数为被取消上传的文件对象。 console.log("msg:当点击文件队列中文件的关闭按钮或点击取消上传。") console.log(file) }, ‘onInit‘: function () { //首次初始化Uploadify结束时触发。 console.log(‘msg:首次初始化‘); }, ‘onUploadSuccess‘: function (file, data, response) { //当文件上传成功时触发。 var json = jQuery.parseJSON(data); console.log(‘msg:文件上传成功‘); console.log(file) console.log(json) console.log(response) alert(json.resultMsg); if (json.isSucc) { $("#OpenEditId").dialog("destroy"); } }, ‘onError‘: function (type, info) { //当单个文件上传出错时触发。 console.log(‘msg:文件上传出错‘); console.log(type); console.log(info); }, ‘onFallback‘: function () { //当Uploadify初始化过程中检测到当前浏览器不支持flash时触发。 console.log(‘msg:当前浏览器不支持flash时触发‘); }, ‘onSWFReady‘: function () { //Flash文件载入成功后触发。 console.log(‘msg:Flash文件载入成功‘); } })
这样子问题就解决了。
protected void Application_BeginRequest(object sender, EventArgs e)
{
try
{
// 解决火狐、360浏览器使用uploadify上传session丢失的问题
string session_param_name = "ASPSESSIONID";
string session_cookie_name = "ASP.NET_SessionId";
if (Request[session_param_name] != null)
{
UpdateCookie(session_cookie_name, Request[session_param_name]);
}
string auth_param_name = "AUTHID";
string auth_cookie_name = FormsAuthentication.FormsCookieName;
if (Request[auth_param_name] != null)
{
UpdateCookie(auth_cookie_name, Request[auth_param_name]);
}
}
catch { }
}
private void UpdateCookie(string cookie_name, string cookie_value)
{
HttpCookie cookie = Request.Cookies.Get(cookie_name);
if (cookie == null)
{
cookie = new HttpCookie(cookie_name);
}
cookie.Value = cookie_value;
Request.Cookies.Set(cookie);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。