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

时间: 2024-08-25 17:38:44

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

angulaijs中的ng-upload-file与阿里云oss服务的结合,实现在浏览器端上传文件到阿里云(速度可以达到1.5M)

angularjs结合aliyun浏览器端oos文件上传加临时身份验证例子 在服务端获取sts 源码: public class StsServiceSample { // 目前只有"cn-hangzhou"这个region可用, 不要使用填写其他region的值 //<setting name="accessKeyId" value="H6JSh0Y****z2cGa" /> //<setting name="ecr

ueditor浏览器 无法上传文件.问题

dll也都引用了 路径绝对tmd没问题 最后 我一点一点的调试发现了问题 草tmd百度程序员 */UE.ajax = function() { //创建一个ajaxRequest对象 var fnStr = 'XmlHttpRequest()';            <====================================你妈的  你tmd测试了吗 这里 应该是XMLHttpRequest try { new ActiveXObject("Msxml2.XMLHTTP&

【纯干货】4年前想解决的事情,今天才实验成功:浏览器原生分块上传文件

第一份软件开发工作的第一个星期(不算做试用期的一个星期,无薪水试用).因为不是软件专业,也没有经过培训和相关工作经验.老板不放心,但还是让我试一试.做的第一件事情就是上传文件,实时看进度,并且上传后预览.预览的文件类型有word,ppt,excel,flash,视频按帧获取预览图.office文件是在服务器端转成html后显示出来. 做的还满意,就留下来了,后来就在那个公司待了两年. 没解决的事情: 上传大文件,分块上传,浏览器原生不支持,需要借助第三方插件.最根本的原因就是浏览器端的js考虑的

jquery uploadify上传文件插件导致浏览器崩溃问题解决方法

自谷歌浏览器更新到(版本39.0.2171.99 )后,访问上传文件界面浏览器就崩溃了,而其他的浏览器不会出现问题. 出现这种问题的原因就是谷歌浏览器缓存问题,但将访问该jsp页面路径添加上时间戳后无法解决问题,将界面引入uploadify.js中也添加了个随机变量还是不行.最后将引入js换成下面形式就解决了: 代码如下: [javascript] view plaincopyprint? document.write("<script type='text/javascript' &qu

WebUploader 上传插件结合bootstrap的模态框使用时选择上传文件按钮无效问题的解决方法

由于种种原因(工作忙,要锻炼健身,要看书,要学习其他兴趣爱好,谈恋爱等),博客已经好久没有更新,为这个内心一直感觉很愧疚,今天开始决定继续更新博客,每周至少一篇,最多不限篇幅. 今天说一下,下午在工作中遇到的一个问题:公司的后端同事用bootstrap的模态框,结合WebUploadder做后台上传文件的功能的时候,发现上传按钮点击无效.同事过来请求我支援,我研究了下,发现了三种解决方案,下面具体说说是这三种方法是怎么解决的. 我们先来分析一下解决这个问题的思路: 为什么上传控件放到模态框里面就

jQuery 关于IE9上传文件无法进入后台原因及解决办法(ajaxfileupload.js第四弹)

第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏览器(其实是故意的,懒得想浏览器兼容的问题,哈哈~),所以当我使用IE9去运行demo的时候,确实发现了同样的问题,就是ajax异步提交表单无法进入后台. 下面是解决整个问题的过程,以我在<jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹) >中上传的de

jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)

第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏览器(其实是故意的,懒得想浏览器兼容的问题,哈哈~),所以当我使用IE9去运行demo的时候,确实发现了同样的问题,就是ajax异步提交表单无法进入后台. 下面是解决整个问题的过程,以我在<jQuery 自制上传头像插件-附带Demo实例(ajaxfileupload.js第三弹) >中上传的de

万家报账平台没有“上传文件”按钮的解决办法

在有的电脑没有"上传文件"的按钮? 第一步:首先检查浏览器设置. 第二步:找到IE的Internet选项菜单,开启菜单栏的根据下列方面找,如下图: 第三步:找到Internet选项后,点击,选择安全选项卡,并点击"自定义级别" 第四步:找到"将文件上载到服务器时包含本地目录路径"选择"启用".然后点击确定关闭IE,重启打开. 第五步:更新浏览器的flash版本.在百度中搜索"flash player官网"即

Android上传图片到PHP服务器并且支持浏览器上传文件(word、图片、音乐等)

暑假已经过了一半了,这才完成计划当中的第二个任务.虽然进度是慢了点.但也算是暑假的收获吧.下面我就把我学习当中的收获记录在此. 还是跟以往一样,先上图片. 操作的步骤:打开程序---->选择上传的照片----->点击返回键------>显示没有选择上传图片的toast------>点击上传的图片----->打印图片的存储的物理路径---->询问是否确认上传选择的图片----->确认则显示上传成功---->取消则退出 php代码: <?php //上传文