jQuery uploadify在谷歌和火狐瀏覽器上傳失敗的解決方案
jquery.uploadify插件是一個基于jquery來實現(xiàn)上傳的,這個插件很好用,每一次向后臺發(fā)送數(shù)據(jù)流請求時,ie會自動把本地cookie存儲捆綁在一起發(fā)送給服務(wù)器。但firefox、chrome不會這樣做,他們會認為這樣不安全,下面小編給大家分享有關(guān)jQuery uploadify在谷歌和火狐瀏覽器上傳失敗的解決方案。
我是這樣解決的,這樣所有上傳文件的代碼都不需要修改,改動量最小,但是有安全隱患:
if (this.LoginInfo == null)
{
// 解決uploadify兼容火狐谷歌瀏覽器上傳問題
// 但是,此代碼使系統(tǒng)有安全隱患,F(xiàn)lash程序請求該系統(tǒng)不需要驗證
// 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到
if (Request.UserAgent == "Shockwave Flash")
{
return;
}
else
{
filterContext.Result = RedirectToAction("LoginAgain", "Account", new { Area = "Auth" });
return;
}
}
我們的系統(tǒng)是ASP.NET MVC的,雖說通過加密的方式可以讓用戶看不到敏感信息,但惡意用戶不需要把敏感信息解密出來就可繞過系統(tǒng)驗證。
驗證信息不能直接寫前臺,可以用ajax從后臺獲取驗證信息,然后傳給flash,然后在攔截器中驗證。
修改后:
JS代碼:
ajax請求后臺獲取用戶名,傳給flash
$(function () {
$.ajax({
url: "/Auth/Account/GetUserNamePwd",
type: "POST",
dataType: "json",
data: {},
success: function (data) {
$("#uploadify").uploadify({
height: 25,
width: 100,
swf: '/Content/Plugins/UploadifyJs/uploadify.swf',
uploader: 'UploadFile',
formData: {
userName: data.data.userName, //ajax獲取的用戶名
pwd: data.data.pwd //ajax獲取的密碼
},
buttonText: '選擇文件上傳',
fileSizeLimit: '4MB',
fileTypeDesc: '文件',
fileTypeExts: '*.*',
queueID: 'fileQueue',
multi: true,
onUploadSuccess: function (fileObj, data, response) {
var d = eval("(" + data + ")");
$(".uploadify-queue-item").find(".data").html(" 上傳完成");
$("#url").val(d.url);
$("#name").val(d.name);
},
onUploadError: function (event, ID, fileObj, errorObj) {
if (event.size > 4 * 1024 * 1024) {
alert('超過文件上傳大小限制(4M)!');
return;
}
alert('上傳失敗');
}
}); //end uploadify
}
});
}); //end $
攔截器中代碼:
......
if (this.LoginInfo == null)
{
// 解決uploadify兼容火狐谷歌瀏覽器上傳問題
// 但是,此代碼使系統(tǒng)有安全隱患,F(xiàn)lash程序請求該系統(tǒng)不需要驗證
// 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到
if (Request.UserAgent == "Shockwave Flash")
{
string userName = Request.Params["userName"];
string pwd = Request.Params["pwd"];
if (!string.IsNullOrWhiteSpace(userName) && !string.IsNullOrWhiteSpace(pwd))
{
AuthDAL authDAL = new AuthDAL();
sys_user user = authDAL.GetUserInfoByName(userName);
if (user != null && user.password == pwd)
{
return;
}
}
}
else
{
filterContext.Result = RedirectToAction("LoginAgain", "Account", new { Area = "Auth" });
return;
}
}
最近還總結(jié)個問題在jquery.uploadify上傳插件導致google崩潰 ,很讓人惱火,最后抓包看看到底什么原因,才發(fā)現(xiàn)原來谷歌在第一次請求時,它會把所有需要引用的文件放入本地緩存,而uploadify需要每次都能請求,所以最后導致了崩潰出現(xiàn)...
如何解決jquery.uploadify上傳插件導致google崩潰的問題呢?
解決辦法,可以在每個引用的文件后面加個隨機數(shù),讓它每次請求都帶個參數(shù),該問題則自動解決


- jQuery.uploadify文件上傳組件實例講解
- jQuery文件上傳控件 Uploadify 詳解
- php+jQuery.uploadify實現(xiàn)文件上傳教程
- jQuery文件上傳插件Uploadify使用指南
- Jquery Uploadify多文件上傳帶進度條且傳遞自己的參數(shù)
- 基于Jquery插件Uploadify實現(xiàn)實時顯示進度條上傳圖片
- 解決jQuery上傳插件Uploadify出現(xiàn)Http Error 302錯誤的方法
- jquery插件uploadify實現(xiàn)帶進度條的文件批量上傳
- 解決jQuery uploadify在非IE核心瀏覽器下無法上傳
- firefox瀏覽器用jquery.uploadify插件上傳時報HTTP 302錯誤
- 詳解jQuery uploadify文件上傳插件的使用方法
相關(guān)文章
C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實現(xiàn)
本文主要介紹了C#創(chuàng)建及訪問網(wǎng)絡(luò)硬盤的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
WPF實現(xiàn)在控件上顯示Loading等待動畫的方法詳解
這篇文章主要介紹了WPF 如何在控件上顯示 Loading 等待動畫,文中的示例代碼講解詳細,對我們學習或工作有一定幫助,需要的可以參考一下2023-03-03
C#解決多IfElse判斷語句和Switch語句問題的方法分享
這篇文章主要為大家介紹C#如何使用設(shè)計模式中的策略模式和委托來解決多個IfElse判斷語句和Switch語句,這種替換方式在其他語言也一樣可以做到,感興趣的可以了解一下2022-12-12
C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法
這篇文章主要介紹了C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法,涉及C#進程調(diào)用的相關(guān)使用技巧,非常簡單實用,需要的朋友可以參考下2015-04-04

