解決jQuery上傳插件Uploadify出現(xiàn)Http Error 302錯(cuò)誤的方法
之前介紹過jquery uploadify上傳插件的使用方法,我在使用中遇到過Http Error 302錯(cuò)誤問題,應(yīng)該會(huì)有很多人在使用中遇到過,在此記錄下來:
首先http 302是請求被重定向的意思,這就很容易理解了,如果你的uploadify處理上傳腳本有session驗(yàn)證,就會(huì)出現(xiàn)此錯(cuò)誤,因?yàn)閒lash在執(zhí)行post請求的時(shí)候沒有包含cookie信息,而服務(wù)器的session會(huì)根據(jù)客戶端的cookie來得到SESSIONID。沒有提交cookie自然就不能獲取到session,然后uploadify就返回了302(請求被重定向)的錯(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傳過去,這樣Http Error 302錯(cuò)誤就可以得到解決。
問題擴(kuò)展:MVC使用uploadify3.1 IE下正常firefox、chrome也出現(xiàn)HTTPERROR 302錯(cuò)誤,有什么解決辦法?
jquery uploadify在ie下可以正常上傳,在實(shí)現(xiàn)異步上傳的時(shí)候,每一個(gè)文件在上傳時(shí)都會(huì)提交給服務(wù)器一個(gè)請求。每個(gè)請求都需要安全驗(yàn)證,session 和cookie的校驗(yàn)。是的,就是這樣。由于jquery uploadify是借助flash來實(shí)現(xiàn)上傳的,每一次向后臺(tái)發(fā)送數(shù)據(jù)流請求時(shí),ie會(huì)自動(dòng)把本地cookie存儲(chǔ)捆綁在一起發(fā)送給服務(wù)器。但 firefox、chrome不會(huì)這樣做,他們會(huì)認(rèn)為這樣不安全。
首先需要對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);
}
初始化頁面上傳插件代碼如下
<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)容請參考專題《ajax上傳技術(shù)匯總》,《javascript文件上傳操作匯總》和《jQuery上傳操作匯總》進(jìn)行學(xué)習(xí)。
一個(gè)問題的研究可以是發(fā)散性的是多方面,我們要學(xué)會(huì)舉一反三,這樣才能靈活的學(xué)習(xí)專業(yè)知識(shí),掌握專業(yè)技能,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
Easyui使用Dialog行內(nèi)按鈕布局的實(shí)例
下面小編就為大家?guī)硪黄狤asyui使用Dialog行內(nèi)按鈕布局的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07
jQuery實(shí)現(xiàn)仿QQ頭像閃爍效果的文字閃動(dòng)提示代碼
這篇文章主要介紹了jQuery實(shí)現(xiàn)仿QQ頭像閃爍效果的文字閃動(dòng)提示代碼,涉及jQuery正則表達(dá)式及定時(shí)函數(shù)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
jQuery中與toggleClass等價(jià)的程序段 以及未來學(xué)習(xí)的方向
昨天開始學(xué)jQuery,js是我前端設(shè)計(jì)技術(shù)的一塊心病,一直沒有找到很好的學(xué)習(xí)辦法。最近突然開悟,可以學(xué)jQuery呀,這個(gè)東西比較好學(xué)。2010-03-03
jQuery實(shí)現(xiàn)數(shù)字加減效果匯總
本文將介紹常見的幾種使用spinner數(shù)字微調(diào)器來實(shí)現(xiàn)數(shù)字加減的功能的方法。非常的簡單實(shí)用,這里推薦給大家2014-12-12

