이전에 jquery uploadify 업로드 플러그인 사용 방법을 소개했습니다. 사용 중에 Http Error 302 오류 문제가 발생했을 것입니다. 여기에 기록하겠습니다.
우선 http 302는 요청이 리디렉션되었음을 의미하므로 업로드 처리 업로드 스크립트에 세션 확인이 있는 경우 게시 요청을 실행할 때 플래시에 쿠키 정보가 포함되지 않고 서버가 해당 오류를 발생시킵니다. 세션은 클라이언트 쿠키를 기반으로 SESSIONID를 가져옵니다. 당연히 쿠키를 제출하지 않으면 세션을 얻을 수 없으며 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>
그런 다음 서버 측 세션 확인 전:
if (isset($_POST['session'])){ session_id($_POST['session']); session_start();//注意此函数要在session_id之后 }
물론 URL에 세션 ID를 직접 전달하여 Http Error 302 오류를 해결할 수도 있습니다.
문제 확장: uploadify3.1 IE를 사용하는 MVC의 일반 Firefox 및 Chrome에서도 HTTPERROR 302 오류가 발생합니다. 해결책이 있나요?
jquery uploadify는 IE에서 정상적으로 업로드할 수 있습니다. 비동기 업로드를 구현하면 업로드 시 각 파일이 서버에 요청을 제출합니다. 각 요청에는 보안 확인, 세션 및 쿠키 확인이 필요합니다. 예, 그게 다입니다. jquery uploadify는 플래시를 사용하여 업로드를 구현하므로 데이터 흐름 요청이 백그라운드로 전송될 때마다 IE는 자동으로 로컬 쿠키 저장소를 묶어 서버로 보냅니다. 그러나 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>
문제에 대한 연구는 다양하고 다면적일 수 있습니다. 전문 지식을 유연하게 익히고 전문 기술을 익히려면 하나의 사례에서 추론을 이끌어 내는 방법을 배워야 합니다. 모든 사람의 학습에 도움이 되기를 바랍니다.