码迷,mamicode.com
首页 > Web开发 > 详细

解决Jqueryify插件在火狐,360浏览器无法上传文件问题

时间:2015-03-16 14:11:52      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:

反复调试,发现其问题所在: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);
        }

解决Jqueryify插件在火狐,360浏览器无法上传文件问题

标签:

原文地址:http://www.cnblogs.com/wzk153/p/4341690.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!