解决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);
        }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。