麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > JavaScript > 正文

解決jQuery uploadify在非IE核心瀏覽器下無法上傳

2024-05-06 16:24:21
字體:
來源:轉載
供稿:網友

之前上傳了一個通過Flash實現多文件上傳,但是在IE正常運行,FireFox 不能正常上傳。經過反復研究學習,之所以firefox和360瀏覽器無法正常運行,是因為FireFox、chrome、360瀏覽器等支持HTML5的瀏覽器不會再文件上傳時自動帶入session信息和cookie,不共享session。

一、jquery uploadify自我介紹:

(1)、大家好,我是jquery插件大家族中負責實現異步上傳的插件,我不是唯一,只是較好用的一款。

(2)、我的功能:

支持單文件或多文件上傳,可控制并發上傳的文件數

在服務器端支持各種語言與之配合使用,諸如PHP,.NET,Java……

通過參數可配置上傳文件類型及大小限制

通過參數可配置是否選擇文件后自動上傳

易于擴展,可控制每一步驟的回調函數(onSelect, onCancel……)

通過接口參數和CSS控制外觀

Uploadify主頁地址:http://www.uploadify.com/在該頁面你可以了解到關于他的更多內容。

(3)、我的用法:

去baidu.com,google.com search search,很多。

二、firefox下我出故障了,是我的問題嗎?

jquery uploadify在ie下可以正常上傳,在實現異步上傳的時候,每一個文件在上傳時都會提交給服務器一個請求。每個請求都需要安全驗證,session和cookie的校驗。是的,就是這樣。由于jquery uploadify是借助flash來實現上傳的,每一次向后臺發送數據流請求時,ie會自動把本地cookie存儲捆綁在一起發送給服務器。但firefox、chrome不會這樣做,他們會認為這樣不安全。哈,這就是原因。

找到原因了,在讓我們來明白兩個概念:

(1)、session:

Session又稱為會話狀態,是Web系統中最常用的狀態,用于維護和當前瀏覽器實例相關的一些信息。舉個例子來說,我們可以把已登錄用戶的用戶名放在Session中,這樣就能通過判斷Session中的某個Key來判斷用戶是否登錄,如果登錄的話用戶名又是多少。

我們知道,Session對于每一個客戶端(或者說瀏覽器實例)是“人手一份”,用戶首次與Web服務器建立連接的時候,服務器會給用戶分發一個 SessionID作為標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SessionID包含在 HTTP頭中提交給Web服務器,這樣Web服務器就能區分當前請求頁面的是哪一個客戶端。那么,ASP.NET 2.0提供了哪些存儲SessionID的模式呢!

(2)、Cookie,有時也用其復數形式Cookies,指某些網站為了辨別用戶身份、進行session跟蹤而儲存在用戶本地終端上的數據(通常經過加密)。

三、解決方案

1.asp.net環境下

在Global.asax文件中,編寫如下代碼:

 

 
  1. void Application_BeginRequest(object sender, EventArgs e)  
  2. try {  
  3. string session_param_name = "ASPSESSID";  
  4. string session_cookie_name = "ASP.NET_SessionId";  
  5. if (HttpContext.Current.Request.Form[session_param_name] != null)  
  6. {  
  7. UpdateCookie(session_cookie_name, HttpContext.Current.Request.Form[session_param_name]);  
  8. }  
  9. else if (HttpContext.Current.Request.QueryString[session_param_name] != null)  
  10. {  
  11. UpdateCookie(session_cookie_name, HttpContext.Current.Request.QueryString[session_param_name]);  
  12. }  
  13. catch {  
  14. }  
  15.  
  16. //此處是身份驗證 
  17. try {  
  18. string auth_param_name = "AUTHID";  
  19. string auth_cookie_name = FormsAuthentication.FormsCookieName;  
  20. if (HttpContext.Current.Request.Form[auth_param_name] != null)  
  21. {  
  22. UpdateCookie(auth_cookie_name, HttpContext.Current.Request.Form[auth_param_name]);  
  23. }  
  24. else if (HttpContext.Current.Request.QueryString[auth_param_name] != null)  
  25. {  
  26. UpdateCookie(auth_cookie_name, HttpContext.Current.Request.QueryString[auth_param_name]); 
  27. }  
  28. catch { } 
  29.  
  30. private void UpdateCookie(string cookie_name, string cookie_value) 
  31. HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(cookie_name); 
  32. if (null == cookie) 
  33. cookie = new HttpCookie(cookie_name); 
  34. cookie.Value = cookie_value; 
  35. HttpContext.Current.Request.Cookies.Set(cookie);//重新設定請求中的cookie值,將服務器端的session值賦值給它 

/*---------------------------Aspx頁面端代碼---------------------------------*/

?

1

2

3

4

 

this.hfAuth.Value = Request.Cookies[FormsAuthentication.FormsCookieName] == null ? string.Empty : Request.Cookies[FormsAuthentication.FormsCookieName].Value;

 

 

this.hfAspSessID.Value = Session.SessionID;

 

把session值及身份驗證值保存到客戶端控件中,然后你就可以通過js獲取這兩個值,然后傳給下面的插件js初始化程序。

(之所以選擇將session值放入到控件中存儲,也是怕客戶端禁用cookie的考慮。)

/*-----------------------------以下是js代碼----------------------------------*/

 

 
  1. InitUpload: function(auth, AspSessID) { 
  2. $("#uploadify").uploadify({ 
  3. uploader: 'Scripts/jqueryplugins/Infrastructure/uploadify.swf'
  4. script: 'Handlers/ResourceHandler.ashx?OpType=UploadResource'
  5. cancelImg: 'Scripts/jqueryplugins/Infrastructure/cancel.png'
  6. queueID: 'fileQueue'
  7. sizeLimit: '21480000000'
  8. wmode: 'transparent '
  9. fileExt: '*.zip,*.jpg, *.rar,*.doc,*.docx,*.xls,*.xlsx,*.png,*.pptx,*.ppt,*.pdf,*.swf,*.txt'
  10. auto: false
  11. multi: true
  12. scriptData: { ASPSESSID: AspSessID, AUTHID: auth }, 

...........//更多配置項,您可以查看官方配置文檔

在插件初始化的時候,把本地記錄下來的session值,以及身份驗證值傳給初始化方法,進行參數賦值,這樣,每次異步請求上傳文件的時候,相應的 session值就包含在請求文件中了。

2.C#環境下

以上是asp.net下的解決方法,那么C#中應該如何處理呢?

我是這樣解決的,這樣所有上傳文件的代碼都不需要修改,改動量最小,但是有安全隱患:

 

 
  1. if (this.LoginInfo == null
  2. // 解決uploadify兼容火狐谷歌瀏覽器上傳問題 
  3. // 但是,此代碼使系統有安全隱患,Flash程序請求該系統不需要驗證 
  4. // 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到 
  5. if (Request.UserAgent == "Shockwave Flash"
  6. return
  7. else 
  8. filterContext.Result = RedirectToAction("LoginAgain""Account"new { Area = "Auth" }); 
  9. return

我們的系統是ASP.NET MVC的,雖說通過加密的方式可以讓用戶看不到敏感信息,但惡意用戶不需要把敏感信息解密出來就可繞過系統驗證。

驗證信息不能直接寫前臺,可以用ajax從后臺獲取驗證信息,然后傳給flash,然后在攔截器中驗證。

修改后:

JS代碼:

ajax請求后臺獲取用戶名,傳給flash

 

 
  1. $(function () { 
  2. $.ajax({ 
  3. url: "/Auth/Account/GetUserNamePwd"
  4. type: "POST"
  5. dataType: "json"
  6. data: {}, 
  7. success: function (data) { 
  8. $("#uploadify").uploadify({ 
  9. height: 25, 
  10. width: 100, 
  11. swf: '/Content/Plugins/UploadifyJs/uploadify.swf'
  12. uploader: 'UploadFile'
  13. formData: { 
  14. userName: data.data.userName, //ajax獲取的用戶名 
  15. pwd: data.data.pwd //ajax獲取的密碼 
  16. }, 
  17. buttonText: '選擇文件上傳'
  18. fileSizeLimit: '4MB'
  19. fileTypeDesc: '文件'
  20. fileTypeExts: '*.*'
  21. queueID: 'fileQueue'
  22. multi: true
  23. onUploadSuccess: function (fileObj, data, response) { 
  24. var d = eval("(" + data + ")"); 
  25. $(".uploadify-queue-item").find(".data").html("上傳完成"); 
  26. $("#url").val(d.url); 
  27. $("#name").val(d.name); 
  28. }, 
  29. onUploadError: function (event, ID, fileObj, errorObj) { 
  30. if (event.size > 4 * 1024 * 1024) { 
  31. alert('超過文件上傳大小限制(4M)!'); 
  32. return
  33. alert('上傳失敗'); 
  34. }); //end uploadify 
  35. }); 
  36. }); //end $ 

攔截器中代碼:

 

 
  1. ...... 
  2. if (this.LoginInfo == null
  3. {  
  4. // 解決uploadify兼容火狐谷歌瀏覽器上傳問題 
  5. // 但是,此代碼使系統有安全隱患,Flash程序請求該系統不需要驗證 
  6. // 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到 
  7. if (Request.UserAgent == "Shockwave Flash"
  8. string userName = Request.Params["userName"]; 
  9. string pwd = Request.Params["pwd"]; 
  10. if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(pwd)) 
  11. AuthDAL authDAL = new AuthDAL(); 
  12. sys_user user = authDAL.GetUserInfoByName(userName); 
  13. if (user != null && user.password == pwd) 
  14. return
  15. else 
  16. filterContext.Result = RedirectToAction("LoginAgain""Account"new { Area = "Auth" }); 
  17. return
  18. ...... 

3.jsp版解決方法

 

 
  1. <%@ page language="java" contentType="text/html; charset=UTF-8" 
  2. pageEncoding="UTF-8"%> 
  3.  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
  5.  
  6.  
  7. <% 
  8. String syscontext = request.getContextPath(); 
  9.  
  10. %> 
  11.  
  12. <%  
  13. String path = request.getContextPath();  
  14. String basePath = request.getScheme() + "://" 
  15. + request.getServerName() + ":" + request.getServerPort()  
  16. + path;  
  17.  
  18. String sessionid = session.getId(); 
  19.  
  20. %> 
  21.  
  22. <html> 
  23. <head> 
  24. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
  25. <link rel="stylesheet" type="text/css" href="<%=syscontext %>/webcontent/resourceManage/wallpapaer/uploadify/uploadify.css" /> 
  26. <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 
  27. <script type="text/javascript" src="<%=syscontext %>/webcontent/resourceManage/wallpapaer/uploadify/jquery.uploadify-3.1.min.js"></script> 
  28.  
  29. <!-- 注意我使用的jquery uploadify版本--> 
  30.  
  31.  
  32. <script type="text/javascript"
  33. //用來計算上傳成功的圖片數 
  34. var successCount = 1; 
  35.  
  36. $(function() { 
  37. var uploadUrl = '<%=basePath%>/uploadresource.do;jsessionid=<%=sessionid%>?Func=uploadwallpaper2Dfs'
  38.  
  39. var swfUrl2 = "<%=basePath%>/webcontent/resourceManage/wallpapaer/uploadify/uploadify.swf"
  40. $('#file_upload').uploadify({ 
  41. 'swf' : swfUrl2, 
  42. 'uploader' : uploadUrl, 
  43. // Put your options here 
  44. 'removeCompleted' : false
  45. 'auto' : false
  46. 'method' : 'post'
  47. 'onUploadSuccess' : function(file, data, response) { 
  48. add2SuccessTable(data); 
  49. }); 
  50. }); 
  51.  
  52.  
  53.  
  54. /** 
  55. * 將成功上傳的圖片展示出來 
  56. */ 
  57. function add2SuccessTable(data){ 
  58. var jsonObj = JSON.parse(data); 
  59. for(var i =0; i < jsonObj.length; i++){ 
  60. var oneObj = jsonObj[i]; 
  61. var fileName = oneObj.fileName; 
  62. var imgUrl = oneObj.imgUrl; 
  63.  
  64. var td_FileName = "<td>"+fileName+"</td>"
  65. var td_imgUrl = "<td><img width='150' src='"+imgUrl+"'></img></td>"
  66. var oper = "<td><input type='button' value='刪除' onclick='deleteRow("+successCount+")'/></td>"
  67. var tr = "<tr id='row"+successCount+"'>"+successCount+td_FileName+td_imgUrl+oper+"</tr>"
  68.  
  69. $("#successTable").append(tr); 
  70.  
  71. successCount++; 
  72.  
  73.  
  74.  
  75.  
  76. function deleteRow(i){ 
  77. $("#row"+i).empty(); 
  78. $("#row"+i).remove(); 
  79. </script> 
  80.  
  81.  
  82. <title>Insert title here</title> 
  83. </head> 
  84. <body> 
  85. <input type="file" name="file_upload" id="file_upload" /> 
  86. <p>  
  87. <a href="javascript:$('#file_upload').uploadify('upload','*')">開始上傳</a> 
  88. <a href="javascript:$('#file_upload').uploadify('cancel', '*')">取消所有上傳</a> 
  89. </p>  
  90. <table id="successTable"
  91. <tr> 
  92. <td>文件名</td> 
  93. <td>圖片</td> 
  94. <td>操作</td> 
  95. </tr> 
  96. </table> 
  97. </body> 
  98. </html> 

總結

簡單的說,最終的解決辦法就是可以在每個引用的文件后面加個隨機數,讓它每次請求都帶個參數,該問題則自動解決

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 一区二区三区手机在线观看 | jizzjizzjizz少妇 | 国产精品久久久久久久成人午夜 | 国产一精品久久99无吗一高潮 | 黄色片网站免费观看 | 国产在线观看一区二区三区 | 在线观看av国产一区二区 | 羞羞的视频免费观看 | 成人男女啪啪免费观看网站四虎 | 国产精品视频亚洲 | 欧美成人免费在线视频 | 毛片小网站 | 好吊色欧美一区二区三区四区 | 中文欧美日韩 | 成人免费在线视频播放 | 中文字幕欧美亚洲 | 国产又白又嫩又紧又爽18p | 日本一区免费看 | 成人h精品动漫一区二区三区 | 国产成人羞羞视频在线 | 日本视频在线免费观看 | 亚洲午夜视频在线 | 成人在线免费观看小视频 | 国产精品刺激对白麻豆99 | 精品国产91久久久久久浪潮蜜月 | 日本中文字幕久久 | 国产色视频一区 | 成人不卡一区二区 | av电影免费播放 | 伊人99在线 | 一区二区三区视频在线观看 | av电影免费在线 | 久久草草影视免费网 | 港台三级在线观看 | 国产精品久久二区 | chinese军人gay呻吟 | 久草视频国产在线 | 99riav视频一区二区 | 亚洲第一色婷婷 | 中文字幕 在线观看 | 毛片视频网站在线观看 |