亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > 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> 

總結

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

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

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97**国产露脸精品国产| 狠狠色狠狠色综合日日小说| 热99久久精品| 欧美性极品少妇精品网站| 在线观看国产精品91| 91久久久久久国产精品| 精品人伦一区二区三区蜜桃免费| 日韩欧美aⅴ综合网站发布| 亚洲国产精品成人一区二区| 亚洲欧美成人精品| 亚洲美女自拍视频| 中文字幕在线日韩| 国模叶桐国产精品一区| 欧美另类在线观看| 久久福利网址导航| 国产欧美日韩视频| 奇米四色中文综合久久| 欧美日韩午夜剧场| 日韩a**中文字幕| 日韩av手机在线看| 久久夜色撩人精品| 亚洲第一免费播放区| 亚洲最大福利视频网站| 欧美国产日本高清在线| 亚洲电影免费观看高清完整版| 久久九九国产精品怡红院| 国产成人在线一区二区| 精品丝袜一区二区三区| 国产亚洲精品日韩| 国产成人激情小视频| 亚洲人成电影网站色xx| 亚洲精品xxx| 国产精品国语对白| 国产欧美亚洲视频| 91牛牛免费视频| 91最新国产视频| 欧美乱大交xxxxx另类电影| 成人免费网站在线观看| 久久久免费高清电视剧观看| 国产精品人人做人人爽| 最近2019中文免费高清视频观看www99| 亚洲成年网站在线观看| 91爱爱小视频k| 久久99久久99精品中文字幕| 伦伦影院午夜日韩欧美限制| 欧美激情精品久久久久久免费印度| 欧美亚州一区二区三区| 亚洲国产精品成人va在线观看| 亚洲国产精品高清久久久| 成人免费高清完整版在线观看| 欧美精品精品精品精品免费| 久久久久久尹人网香蕉| 久久久久久久久久国产| 中文字幕亚洲欧美日韩高清| 国产91色在线播放| 日韩精品视频在线免费观看| 国产精品极品美女粉嫩高清在线| 久久精品电影一区二区| 亚洲国产日韩一区| 欧美性xxxx18| 超碰91人人草人人干| 欧美日韩亚洲国产一区| 日韩精品久久久久久福利| 538国产精品一区二区在线| 午夜精品久久久久久99热| 久久久成人精品视频| 久久中文字幕一区| 国产精品夜间视频香蕉| 久久成人精品一区二区三区| 亚洲成人激情小说| 777精品视频| 热99精品里视频精品| 国产精品爱久久久久久久| 国产日韩中文在线| 深夜成人在线观看| 黄色精品一区二区| 久久免费国产视频| 亚洲欧美在线一区| 中文字幕亚洲天堂| 理论片在线不卡免费观看| 日韩美女视频在线观看| 九九热最新视频//这里只有精品| 欧美成人三级视频网站| 成人免费高清完整版在线观看| 欧美激情videoshd| 97热在线精品视频在线观看| 91精品国产自产在线老师啪| 国产成人jvid在线播放| 精品日本美女福利在线观看| 一个人看的www欧美| 热re99久久精品国产66热| 成人高清视频观看www| 欧美国产亚洲精品久久久8v| 亚洲欧美一区二区激情| 精品无人国产偷自产在线| 国产日韩精品在线| 亚洲欧美激情另类校园| 日韩大陆毛片av| 亚洲天堂av在线播放| 国产精品美女无圣光视频| 成人免费视频在线观看超级碰| 91系列在线观看| 欧美极品少妇xxxxⅹ喷水| 国产成人精品网站| 国产成人精彩在线视频九色| 亚洲天堂网在线观看| 国产婷婷色综合av蜜臀av| 国外日韩电影在线观看| 伊人久久久久久久久久久久久| 亚洲男人天堂久| 日韩中文在线中文网三级| 亚洲精选在线观看| 欧美激情奇米色| 日韩精品免费一线在线观看| 亚洲成人免费在线视频| 国产精品日韩av| 欧美激情一区二区三级高清视频| 青青在线视频一区二区三区| 成人春色激情网| 亚洲午夜未满十八勿入免费观看全集| 国产精品久久久久久久久借妻| 精品香蕉一区二区三区| 日本免费一区二区三区视频观看| 亚洲国产精品国自产拍av秋霞| 亚洲大胆人体在线| 亚洲精品wwww| 亚洲美女性生活视频| 97在线视频一区| 国产精品极品在线| 国产精品91在线| 国产精品嫩草影院一区二区| 亚洲福利视频免费观看| 久久91亚洲人成电影网站| 日韩禁在线播放| 粉嫩av一区二区三区免费野| 亚洲国产精品久久久久久| 久久精品国产精品亚洲| 欧美另类69精品久久久久9999| 国产做受高潮69| 日韩中文字幕第一页| 日韩美女写真福利在线观看| 日韩中文字幕国产| 日韩视频免费大全中文字幕| 91久久久亚洲精品| 国产精品中文字幕久久久| 国产精品免费看久久久香蕉| 欧美视频国产精品| 亚洲免费一级电影| 国产va免费精品高清在线| 日韩精品在线观看一区二区| 国产日韩一区在线| 亚洲图片欧美日产| 亚洲欧美国产日韩天堂区| 欧美激情一区二区三区在线视频观看| 欧美性猛交xxxxx水多| 色狠狠久久aa北条麻妃| 亚洲激情在线观看视频免费| 日韩精品极品毛片系列视频| 精品少妇v888av| 欧美亚洲成人网| 成人在线一区二区| 欧美激情精品久久久久久大尺度| 日韩中文字在线| 青青久久aⅴ北条麻妃|