Saya memperkenalkan cara menggunakan pemalam muat naik jquery sebelum ini. Saya menghadapi masalah ralat Http 302 semasa digunakan. Saya akan merakamnya di sini
Pertama sekali, http 302 bermakna permintaan telah diubah hala, yang mudah difahami Jika skrip muat naik pemprosesan muat naik anda mempunyai pengesahan sesi, ralat ini akan berlaku kerana kilat tidak termasuk maklumat kuki semasa melaksanakan permintaan pos, dan pelayan. session akan mendapat SESSIONID berdasarkan kuki pelanggan. Sememangnya, sesi tidak boleh diperoleh tanpa menyerahkan kuki, dan muat naik mengembalikan ralat 302 (permintaan diubah hala).
Penyelesaian:
<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之后 }
Pelanjutan masalah: Ralat HTTPROR 302 juga berlaku dalam firefox dan chrome biasa di bawah MVC menggunakan uploadify3.1 IE. Adakah terdapat sebarang penyelesaian?
jquery uploadify boleh memuat naik seperti biasa di bawah IE Apabila melaksanakan muat naik tak segerak, setiap fail akan menyerahkan permintaan kepada pelayan semasa memuat naik. Setiap permintaan memerlukan pengesahan keselamatan, sesi dan pengesahan kuki. Ya, itu sahaja. Memandangkan muat naik jquery menggunakan kilat untuk melaksanakan muat naik, setiap kali permintaan aliran data dihantar ke latar belakang, IE akan secara automatik menggabungkan storan kuki tempatan dan menghantarnya ke pelayan. Tetapi firefox dan chrome tidak akan melakukan ini, mereka akan fikir ia tidak selamat.Mula-mula anda perlu menambah kandungan berikut pada 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>