asp.net批量多選文件上傳解決方案
多選文件上傳,已經(jīng)非常多了,選擇性多了可能有時(shí)候要比較下哪個(gè)更合適,結(jié)合到項(xiàng)目中使用更方便才是最重要的。很多的多選上傳基本上都是調(diào)用的swf文件,確實(shí)用flash 或flex開(kāi)發(fā)一個(gè)多選上傳的功能很方便,比如flex里內(nèi)置的FileReferenceList對(duì)象本身就支持文件的多選,有這個(gè)的話(huà)就方便多了,下面要說(shuō)的主要也是基于flex開(kāi)發(fā)的一個(gè)多選上傳功能。
主要實(shí)現(xiàn)的功能如下:
一、選擇多個(gè)文件上傳并顯示單個(gè)文件的上傳進(jìn)度
二、顯示所有文件總的上傳進(jìn)度
三、顯示所有上傳文件的總大小
四、上傳前可以刪除任意選定一個(gè)或多個(gè)文件(按住Ctrl或Shift鍵)
五、ASP.NET頁(yè)面調(diào)用生成的swf文件異步上傳到服務(wù)器
先看下演示的截圖,如下:





大致功能和上面截圖一樣,下面主要說(shuō)下ASP.NET里怎么調(diào)用,F(xiàn)LEX的里面代碼我這里就不詳細(xì)說(shuō)明了,F(xiàn)LEX里面的代碼不多,文章后面提供下載,用flex3.0或4.0可以打開(kāi)運(yùn)行。
其中有一個(gè)地方說(shuō)明一下,就是在多選刪除的地方,為了保證隨意多選刪除的正確性,需要把選定的索引項(xiàng)降序排序,每次從數(shù)組最大處刪除,避免循環(huán)刪除時(shí)索引超界。
function deleteItem():void{
var selectItems:Array = process_list.selectedItems;
var selectIndex:Array = process_list.selectedIndices;
selectIndex = selectIndex.sort(2);//索引按降序排序
var iCount:int = selectItems.length;
var sizeMum:Number = 0;
for(var i:int=0;i<iCount;i++){
info.splice(selectIndex[i],1);
fileRef.fileList.splice(selectIndex[i],1);//移除的選擇項(xiàng)按索引從大到小移除,以便移除過(guò)程中索引不超界
}
for(var j:Number=0;j<fileRef.fileList.length;j++){
sizeMum+=fileRef.fileList[j].size;
}
process_list.dataProvider = info;
tip_txt.text="共"+fileRef.fileList.length+"個(gè)文件 "+(sizeMum/(1024*1024)).toFixed(4).toString()+"MB";
if(info.length<=0){
delete_btn.enabled = false;
}
}
調(diào)用其實(shí)也比較簡(jiǎn)單,新建一個(gè)asp教程x頁(yè)面加載生成的swf文件,這里生成的文件名是upload.swf,利用flex內(nèi)置的swfobject.js里面的方法加載,如下:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>無(wú)標(biāo)題頁(yè)</title>
<style type="text/css教程" media="screen">
html, body { height:100%; }
body { margin:0; padding:0; overflow:auto; text-align:center;
background-color: #ffffff; }
#flashContent { display:none; }
</style>
<script type="text/網(wǎng)頁(yè)特效" src="swfobject.js"></script>
<script type="text/javascript" >
var swfVersionStr = "10.0.0";
var xiSwfUrlStr = "playerProductInstall.swf";
var flashvars = {};
flashvars.url = "SaveFile.aspx?Param=ID|100,NAME|測(cè)試用戶(hù)";
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "upload";
attributes.name = "upload";
attributes.align = "middle";
swfobject.embedSWF(
"upload.swf", "flashContent",
"587", "370",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
function uploadCompelete(){
//完成后的操作,如頁(yè)面跳轉(zhuǎn)或關(guān)閉當(dāng)前頁(yè)
document.getElementById('btnUpload').disabled = false;
}
function submitForm(){
thisMovie("upload").uploadfile();
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function disabledButton()
{
document.getElementById('btnUpload').disabled = true;
}
</script>
</head>
<body>
<div id="flashContent" style="width:587px; height:380px">
</div>
<br />
<input id="btnUpload" style="width: 71px" type="button" value="上 傳" onclick="submitForm()" />
</body>
</html>
如上,頁(yè)面放置一個(gè)按鈕,執(zhí)行upload.swf里面的uploadfile方法,在flex里面其實(shí)是回調(diào)了uploadHandler方法:
//===================
// 點(diǎn)擊上傳按鈕
//===================
internal function uploadHandler():void{
if(uploadFile_num!=0) return;
if(process_list.dataProvider==null || info.length<=0){
Alert.show("您還未選擇文件!","提示信息");
return;
}
else
{
ExternalInterface.call("disabledButton"); //點(diǎn)上傳后禁用按鈕
}
for(var i:Number=0;i<fileRef.fileList.length;i++){
upload_size_total+=fileRef.fileList[i].size;
}
uploadfile(uploadFile_num);
add_btn.enabled = false; //點(diǎn)上傳后禁用瀏覽按鈕
delete_btn.enabled = false;//點(diǎn)上傳后禁用刪除按鈕
}
SaveFile.aspx頁(yè)面主要是接收并存儲(chǔ)文件,如下:
protected void Page_Load(object sender, EventArgs e)
{
//string param = Request["Param"];
string path = Server.MapPath("files/");
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
//HttpFileCollection files = Request.Files;
//string fileName = string.Empty;
//for (int i = 0; i < files.Count; i++)
//{
// fileName = Path.GetFileName(files[i].FileName).ToLower();
// files[i].SaveAs(path + fileName);
//}
HttpPostedFile file = Request.Files["Filedata"]; //文件是一個(gè)一個(gè)異步提交過(guò)來(lái),所以不需要循環(huán)文件集合
if (file != null && file.ContentLength > 0)
{
file.SaveAs(path+Request.Form["filename"]);
}
}畢竟不是以文件流的形式接收和存儲(chǔ),所以如果是上傳大文件的話(huà),可以看到顯示頁(yè)面已經(jīng)上傳完成100%,但是到這個(gè)處理存儲(chǔ)頁(yè)面會(huì)停頓一會(huì),接收并存儲(chǔ)完成后前臺(tái)頁(yè)面才會(huì)反應(yīng)過(guò)來(lái)。
還有一點(diǎn)要提一下,就是如果傳遞的參數(shù)包含中文的話(huà),需要config編碼格式為utf-8格式,但有原先的系統(tǒng)可能是gb2312格式的,改成utf-8可能對(duì)系統(tǒng)有影響,可以單獨(dú)建一個(gè)webconfig,上傳的時(shí)候就讀單獨(dú)的config。
以上就是asp.net批量多選文件上傳代碼,希望可以解決大家進(jìn)行ASP.NET上傳多文件時(shí)遇到的問(wèn)題。
- asp.net下gridview 批量刪除的實(shí)現(xiàn)方法
- Asp.Net 文件操作基類(lèi)(讀取,刪除,批量拷貝,刪除,寫(xiě)入,獲取文件夾大小,文件屬性,遍歷目錄)
- asp.net repeater實(shí)現(xiàn)批量刪除
- JQuery實(shí)現(xiàn)Repeater無(wú)刷新批量刪除(附后臺(tái)asp.net源碼)
- sql server中批量插入與更新兩種解決方案分享(asp.net)
- ASP.NET批量下載文件的方法
- asp.net使用Repeater控件中的全選進(jìn)行批量操作實(shí)例
- SqlCommandBuilder如何實(shí)現(xiàn)批量更新
相關(guān)文章
創(chuàng)建一個(gè)ASP.NET MVC5項(xiàng)目的實(shí)現(xiàn)方法(圖文)
這篇文章主要介紹了創(chuàng)建一個(gè)ASP.NET MVC 5項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
ASP.NET實(shí)現(xiàn)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了ASP.NET實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
在ASP.Net Web Forms中使用依賴(lài)注入的步驟
這篇文章主要介紹了在ASP.Net Web Forms中使用依賴(lài)注入的步驟,幫助大家更好的理解和學(xué)習(xí)使用.NET技術(shù),感興趣的朋友可以了解下2021-03-03
ASP.NET實(shí)現(xiàn)圖書(shū)管理系統(tǒng)的步驟詳解
這篇文章主要介紹了ASP.NET圖書(shū)管理系統(tǒng)簡(jiǎn)單實(shí)現(xiàn)步驟,本文通過(guò)實(shí)例截圖展示的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
.NET使用原生方法實(shí)現(xiàn)文件壓縮和解壓的詳細(xì)過(guò)程
這篇文章主要介紹了.NET使用原生方法實(shí)現(xiàn)文件壓縮和解壓,本文我們主要講的是如何使用.NET原生方法System.IO.Compression命名空間中的類(lèi)來(lái)對(duì)文件和文件夾進(jìn)行壓縮或解壓縮(壓縮格式.zip文件格式),需要的朋友可以參考下2024-06-06
ASP.NET Core對(duì)Controller進(jìn)行單元測(cè)試的完整步驟
這篇文章主要給大家介紹了關(guān)于ASP.NET Core對(duì)Controller進(jìn)行單元測(cè)試的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ASP.NET Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
ADO.NET獲取數(shù)據(jù)(DataSet)同時(shí)獲取表的架構(gòu)實(shí)例
下面小編就為大家分享一篇ADO.NET獲取數(shù)據(jù)(DataSet)同時(shí)獲取表的架構(gòu)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
asp.net DataTable導(dǎo)出Excel自定義列名的方法
本文分享了asp.net DataTable導(dǎo)出Excel 自定義列名的具體實(shí)現(xiàn)方法,步驟清晰,代碼詳細(xì),需要的朋友可以參考借鑒,下面就跟小編一起來(lái)看看吧2016-12-12
輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)DTO
本文詳細(xì)講解了使用Dapper實(shí)現(xiàn)DTO的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
ASP.NET Core實(shí)現(xiàn)AES-GCM加密算法
這篇文章介紹了ASP.NET Core實(shí)現(xiàn)AES-GCM加密的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07

