解決jQuery上傳插件Uploadify出現(xiàn)Http Error 302錯(cuò)誤的方法
之前介紹過(guò)jquery uploadify上傳插件的使用方法,我在使用中遇到過(guò)Http Error 302錯(cuò)誤問(wèn)題,應(yīng)該會(huì)有很多人在使用中遇到過(guò),在此記錄下來(lái):
首先http 302是請(qǐng)求被重定向的意思,這就很容易理解了,如果你的uploadify處理上傳腳本有session驗(yàn)證,就會(huì)出現(xiàn)此錯(cuò)誤,因?yàn)閒lash在執(zhí)行post請(qǐng)求的時(shí)候沒(méi)有包含cookie信息,而服務(wù)器的session會(huì)根據(jù)客戶(hù)端的cookie來(lái)得到SESSIONID。沒(méi)有提交cookie自然就不能獲取到session,然后uploadify就返回了302(請(qǐng)求被重定向)的錯(cuò)誤。
解決辦法:
把session_id的值傳到服務(wù)端:
<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>
然后在服務(wù)器端session驗(yàn)證之前:
if (isset($_POST['session'])){ session_id($_POST['session']); session_start();//注意此函數(shù)要在session_id之后 }
當(dāng)然,你也可以直接在url中將session id傳過(guò)去,這樣Http Error 302錯(cuò)誤就可以得到解決。
問(wèn)題擴(kuò)展:MVC使用uploadify3.1 IE下正常firefox、chrome也出現(xiàn)HTTPERROR 302錯(cuò)誤,有什么解決辦法?
jquery uploadify在ie下可以正常上傳,在實(shí)現(xiàn)異步上傳的時(shí)候,每一個(gè)文件在上傳時(shí)都會(huì)提交給服務(wù)器一個(gè)請(qǐng)求。每個(gè)請(qǐng)求都需要安全驗(yàn)證,session 和cookie的校驗(yàn)。是的,就是這樣。由于jquery uploadify是借助flash來(lái)實(shí)現(xiàn)上傳的,每一次向后臺(tái)發(fā)送數(shù)據(jù)流請(qǐng)求時(shí),ie會(huì)自動(dòng)把本地cookie存儲(chǔ)捆綁在一起發(fā)送給服務(wù)器。但 firefox、chrome不會(huì)這樣做,他們會(huì)認(rèn)為這樣不安全。
首先需要對(duì)global.asxa添加如下內(nèi)容
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); }
初始化頁(yè)面上傳插件代碼如下
<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>
更多精彩內(nèi)容請(qǐng)參考專(zhuān)題《ajax上傳技術(shù)匯總》,《javascript文件上傳操作匯總》和《jQuery上傳操作匯總》進(jìn)行學(xué)習(xí)。
一個(gè)問(wèn)題的研究可以是發(fā)散性的是多方面,我們要學(xué)會(huì)舉一反三,這樣才能靈活的學(xué)習(xí)專(zhuān)業(yè)知識(shí),掌握專(zhuān)業(yè)技能,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
jQuery實(shí)現(xiàn)的fixedMenu下拉菜單效果代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)的fixedMenu下拉菜單效果代碼,通過(guò)自定義fixedMenu方法實(shí)現(xiàn)點(diǎn)擊下拉菜單效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08ASP.NET jQuery 實(shí)例15 通過(guò)控件CustomValidator驗(yàn)證CheckBoxList
這節(jié)我們要講下如何通過(guò)控件CustomValidator來(lái)校驗(yàn)CheckBoxList,客戶(hù)端校驗(yàn)代碼通過(guò)jQuery實(shí)現(xiàn)2012-02-02運(yùn)用JQuery的toggle實(shí)現(xiàn)網(wǎng)頁(yè)加載完成自動(dòng)彈窗
toggle()事件 它主要切換元素的可見(jiàn)狀態(tài),下面為大家介紹下運(yùn)用JQuery的toggle實(shí)現(xiàn)網(wǎng)頁(yè)加載完成自動(dòng)彈窗2014-03-03jQuery實(shí)現(xiàn)jQuery-form.js實(shí)現(xiàn)異步上傳文件
jquery.form.js是一個(gè)非常強(qiáng)大的用于表單提交的插件。這篇文章主要介紹了jQuery實(shí)現(xiàn)jQuery-form.js實(shí)現(xiàn)異步上傳文件,有興趣的可以了解一下。2017-04-04jQuery實(shí)現(xiàn)tag便簽去重效果的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)tag便簽去重效果的方法,較為詳細(xì)的分析了html頁(yè)面及js代碼的實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-01-01jQuery獲取訪問(wèn)者IP地址的方法(基于新浪API與QQ查詢(xún)接口)
這篇文章主要介紹了jQuery獲取訪問(wèn)者IP地址的方法,實(shí)例分析了jQuery基于新浪API與QQ查詢(xún)接口獲取來(lái)訪者IP的相關(guān)參數(shù)傳遞與數(shù)據(jù)處理技巧,需要的朋友可以參考下2016-05-05