jQuery uploadify在谷歌和火狐瀏覽器上傳失敗的解決方案
jquery.uploadify插件是一個(gè)基于jquery來實(shí)現(xiàn)上傳的,這個(gè)插件很好用,每一次向后臺(tái)發(fā)送數(shù)據(jù)流請(qǐng)求時(shí),ie會(huì)自動(dòng)把本地cookie存儲(chǔ)捆綁在一起發(fā)送給服務(wù)器。但firefox、chrome不會(huì)這樣做,他們會(huì)認(rèn)為這樣不安全,下面小編給大家分享有關(guān)jQuery uploadify在谷歌和火狐瀏覽器上傳失敗的解決方案。
我是這樣解決的,這樣所有上傳文件的代碼都不需要修改,改動(dòng)量最小,但是有安全隱患:
if (this.LoginInfo == null)
{
// 解決uploadify兼容火狐谷歌瀏覽器上傳問題
// 但是,此代碼使系統(tǒng)有安全隱患,F(xiàn)lash程序請(qǐng)求該系統(tǒng)不需要驗(yàn)證
// 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗(yàn)證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到
if (Request.UserAgent == "Shockwave Flash")
{
return;
}
else
{
filterContext.Result = RedirectToAction("LoginAgain", "Account", new { Area = "Auth" });
return;
}
}
我們的系統(tǒng)是ASP.NET MVC的,雖說通過加密的方式可以讓用戶看不到敏感信息,但惡意用戶不需要把敏感信息解密出來就可繞過系統(tǒng)驗(yàn)證。
驗(yàn)證信息不能直接寫前臺(tái),可以用ajax從后臺(tái)獲取驗(yàn)證信息,然后傳給flash,然后在攔截器中驗(yàn)證。
修改后:
JS代碼:
ajax請(qǐng)求后臺(tái)獲取用戶名,傳給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程序請(qǐng)求該系統(tǒng)不需要驗(yàn)證
// 要解決此安全隱患,需要Flash程序傳用戶名和密碼過來驗(yàn)證,但是該用戶名和密碼不能寫在前端以便被不法用戶看到
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é)個(gè)問題在jquery.uploadify上傳插件導(dǎo)致google崩潰 ,很讓人惱火,最后抓包看看到底什么原因,才發(fā)現(xiàn)原來谷歌在第一次請(qǐng)求時(shí),它會(huì)把所有需要引用的文件放入本地緩存,而uploadify需要每次都能請(qǐng)求,所以最后導(dǎo)致了崩潰出現(xiàn)...
如何解決jquery.uploadify上傳插件導(dǎo)致google崩潰的問題呢?
解決辦法,可以在每個(gè)引用的文件后面加個(gè)隨機(jī)數(shù),讓它每次請(qǐng)求都帶個(gè)參數(shù),該問題則自動(dòng)解決


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

