Ich habe schon einmal erklärt, wie man das Upload-Plug-in von jquery verwendet. Ich bin bei der Verwendung auf das Fehlerproblem „Http Error 302“ gestoßen. Ich werde es hier aufzeichnen
Erstens bedeutet http 302, dass die Anfrage umgeleitet wurde, was leicht zu verstehen ist. Wenn Ihr Upload-Upload-Skript über eine Sitzungsüberprüfung verfügt, tritt dieser Fehler auf, weil Flash beim Ausführen der Post-Anfrage keine Cookie-Informationen enthält und der Server Die Sitzung erhält die SESSIONID basierend auf dem Cookie des Clients. Natürlich kann die Sitzung nicht ohne Übermittlung des Cookies abgerufen werden, und uploadify gibt einen Fehler 302 (Anfrage umgeleitet) zurück.
Lösung:
<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之后 }
Erweiterung des Problems: HTTPERROR 302-Fehler tritt auch in normalem Firefox und Chrome unter MVC mit uploadify3.1 IE auf. Gibt es eine Lösung?
jquery uploadify kann im IE normal hochgeladen werden. Bei der Implementierung des asynchronen Uploads sendet jede Datei beim Hochladen eine Anfrage an den Server. Jede Anfrage erfordert eine Sicherheitsüberprüfung, Sitzungs- und Cookie-Überprüfung. Ja, das ist es. Da jquery uploadify Flash zum Implementieren des Hochladens verwendet, bündelt der IE jedes Mal, wenn eine Datenflussanforderung an den Hintergrund gesendet wird, automatisch den lokalen Cookie-Speicher und sendet ihn an den Server. Aber Firefox und Chrome werden dies nicht tun, sie werden denken, dass es unsicher ist.Zuerst müssen Sie den folgenden Inhalt zu global.asxa hinzufügen
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>