解决jQuery上传插件Uploadify出现Http Error 302错误的方法


Posted in Javascript onDecember 18, 2015

之前介绍过jquery uploadify上传插件的使用方法,我在使用中遇到过Http Error 302错误问题,应该会有很多人在使用中遇到过,在此记录下来:
首先http 302是请求被重定向的意思,这就很容易理解了,如果你的uploadify处理上传脚本有session验证,就会出现此错误,因为flash在执行post请求的时候没有包含cookie信息,而服务器的session会根据客户端的cookie来得到SESSIONID。没有提交cookie自然就不能获取到session,然后uploadify就返回了302(请求被重定向)的错误。
解决办法:

把session_id的值传到服务端:

<script>
$(document).ready(function() { 
  $('#file_upload').uploadify({ 
  'uploader' : 'uploadify/uploadify.swf', 
  'script' : 'uploadify.php',
  'folder' : 'uploads/file', 
  'formData': { 'session': '<?php echo session_id();?>'}, 
  'onComplete' : function(event, ID, fileObj, response, data) { 
   alert(response); 
  } 
  }); 
}); 
</script>

然后在服务器端session验证之前:

if (isset($_POST['session'])){ 
 session_id($_POST['session']); 
 session_start();//注意此函数要在session_id之后 
}

当然,你也可以直接在url中将session id传过去,这样Http Error 302错误就可以得到解决。

问题扩展:MVC使用uploadify3.1 IE下正常firefox、chrome也出现HTTPERROR 302错误,有什么解决办法?

jquery uploadify在ie下可以正常上传,在实现异步上传的时候,每一个文件在上传时都会提交给服务器一个请求。每个请求都需要安全验证,session 和cookie的校验。是的,就是这样。由于jquery uploadify是借助flash来实现上传的,每一次向后台发送数据流请求时,ie会自动把本地cookie存储捆绑在一起发送给服务器。但 firefox、chrome不会这样做,他们会认为这样不安全。

首先需要对global.asxa添加如下内容

protected void Application_BeginRequest(object sender, EventArgs e)
  {
   /* we guess at this point session is not already retrieved by application so we recreate cookie with the session id... */
   try
   {
    string session_param_name = "ASPSESSID";
    string session_cookie_name = "ASP.NET_SessionId";

    if (HttpContext.Current.Request.Form[session_param_name] != null)
    {
     UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);
    }
    else if (HttpContext.Current.Request.QueryString[session_param_name] != null)
    {
     UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);
    }
   }
   catch
   {
   }

   try
   {
    string auth_param_name = "AUTHID";
    string auth_cookie_name = FormsAuthentication.FormsCookieName;

    if (HttpContext.Current.Request.Form[auth_param_name] != null)
    {
     UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);
    }
    else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)
    {
     UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]);
    }

   }
   catch
   {
   }
  }

  private void UpdateCookie(string cookie_name, string cookie_value)
  {
   HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name);
   if (null == cookie)
   {
    cookie = new HttpCookie(cookie_name);
   }
   cookie.Value = cookie_value;
   HttpContext.Current.Request.Cookies.Set(cookie);
  }

初始化页面上传插件代码如下

<script type="text/javascript">
  var auth = "@(Request.Cookies[FormsAuthentication.FormsCookieName]==null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value)";
  var ASPSESSID = "@Session.SessionID";

  $(function () {
   $('#upload').uploadify({
    'formData': { 'folder': '/Upload', 'ASPSESSID': ASPSESSID, 'AUTHID': auth },
    'buttonText': '浏览',
    'buttonClass': 'browser',
    'fileSizeLimit' : '100KB',
    'fileTypeExts': '*.xls;*.xlsx',
    'removeCompleted': false,
    'swf': '@Url.Content("~/Scripts/Uploadify/uploadify.swf")',
    'uploader': '/Upload',
    'onUploadSuccess': function (file, data, response) {}
   });
  });
 </script>

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

 一个问题的研究可以是发散性的是多方面,我们要学会举一反三,这样才能灵活的学习专业知识,掌握专业技能,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js玩一玩WSH吧
Feb 23 Javascript
JS仿flash上传头像效果实现代码
Jul 18 Javascript
用jquery方法操作radio使其默认选项是否
Sep 10 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
jQuery中ajax和post处理json的不同示例对比
Nov 02 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
Javascript中的迭代、归并方法详解
Jun 14 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
js 判断当前时间是否处于某个一个时间段内
Sep 19 Javascript
js里面的变量范围分享
Jul 18 Javascript
JavaScript Math.round() 方法
Dec 18 #Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
Dec 18 #Javascript
js格式化时间的方法
Dec 18 #Javascript
谈谈我对JavaScript DOM事件的理解
Dec 18 #Javascript
JavaScript中字符串与Unicode编码互相转换的实现方法
Dec 18 #Javascript
jQuery Validation PlugIn的使用方法详解
Dec 18 #Javascript
最简单的JavaScript图片轮播代码(两种方法)
Dec 18 #Javascript
You might like
PHP请求远程地址设置超时时间的解决方法
2016/10/29 PHP
ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解
2019/04/03 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
javascript日期操作详解(脚本之家整理)
2015/09/05 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
Bootstrap模态框案例解析
2017/03/05 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python中的map、reduce和filter浅析
2014/04/26 Python
Python中apply函数的用法实例教程
2014/07/31 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
python实现朴素贝叶斯算法
2018/11/19 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
学习Python爬虫的几点建议
2020/08/05 Python
Python读取多列数据以及用matplotlib制作图表方法实例
2020/09/23 Python
python 实现aes256加密
2020/11/27 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
毕业生自荐书
2014/02/03 职场文书
师德师风建设方案
2014/05/08 职场文书
法学专业毕业实习自我鉴定2014
2014/09/27 职场文书
学生打架检讨书
2014/10/20 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
Flask response响应的具体使用
2021/07/15 Python