轉(zhuǎn)帖|其它|編輯:郝浩|2011-05-17 11:36:49.000|閱讀 2531 次
概述:這些天一直在弄文件上傳,從中學(xué)到了一些知識(shí)和大家分享一下,同時(shí)也希望大家?guī)兔χ刚?/p>
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
這些天一直在弄文件上傳,從中學(xué)到了一些知識(shí)和大家分享一下,同時(shí)也希望大家?guī)兔χ刚?/p>
先看看FileUpload控件吧,這個(gè)一般都比較熟悉,它是VS的一個(gè)自定義控件用起來(lái)很方便,但是值得注意的是每次上傳文件時(shí),只能選取一個(gè)文件,也就是說(shuō)每次我們上傳文件時(shí),只能一個(gè)控件上傳一個(gè)文件。對(duì)于多文件上傳的話我想如果限定在此控件的話,那么只能多次添加文件實(shí)現(xiàn),或者利用多個(gè)FileUpload的控件一起上傳達(dá)到上傳多文件目的。但不管哪個(gè)方法原理都是一樣的我們并不能一個(gè)控件選取多個(gè)文件。下面是我我寫的關(guān)于多個(gè)控件一起上傳文件代碼
首先,需要在前臺(tái)Default.aspx中拖放多個(gè)FileUpload的控件(這里放四個(gè))然后放一個(gè)按鈕
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload runat="server" Width="320px"ID="FileUpload1" class="text"></asp:FileUpload>
<asp:FileUpload runat="server" Width="320px" ID="FileUpload2" class="text"></asp:FileUpload>
<asp:FileUpload runat="server" Width="320px" ID="FileUpload3" class="text"></asp:FileUpload>
<asp:FileUpload runat="server" Width="320px" ID="FileUpload4" class="text"></asp:FileUpload>
</div>
<div>
<p align="center"><asp:Button ID="FileUpload" runat="server" Text="開(kāi)始上傳" onclick="FileUpload_Click" /> </p>
</div>
</form>
</body>
這里主是演示下原理 布局就隨意了
添加好按鈕后在設(shè)計(jì)模式下雙擊添加點(diǎn)擊事件
下面Default.aspx.cs中的按鈕點(diǎn)擊事件
#region //消息輸出
protected void ShowMessageBox(string strMessage)
{
Response.Write(string.Format("<script>alert('{0}')</script>", strMessage));
}
#endregion
protected void FileUpload_Click(object sender, EventArgs e)
{
HttpFileCollection hfc = Request.Files;//獲取上傳文件
for (int i = 0; i < hfc.Count; i++)
{
if (hfc[i].ContentLength > 0)
{
bool filesAllow = false;//設(shè)置文件是否被上傳
//從控件中讀取文件名
string strFilename = hfc[i].FileName;
//讀取設(shè)置文件格式,判斷上傳文件格式是否滿足條件
string Type = ConfigurationManager.AppSettings["FileTypeLimit"].ToString();
//將字符串差分
string[] fileType = Type.Split(';');
//獲取上傳文件后綴
string name = strFilename.Substring(strFilename.LastIndexOf("."),
strFilename.Length - strFilename.LastIndexOf("."));
// string fileExtension = Path.GetExtension
(strFilename).ToLower();//得到上傳文件格式
for (int k = 0; k < fileType.Length; k++)//判斷上傳文件是否匹配
{
if (name == fileType[k])
filesAllow = true;
}
if (filesAllow == true)
{
//獲取上傳文件限制大小
int Filelength = Convert.ToInt32(ConfigurationManager.AppSettings["FileSizeLimit"].ToString());
//獲取上傳文件的大小
int localFileLength = hfc[i].ContentLength;
if (localFileLength/1024<= Filelength)
{
//獲取上傳文件路徑
string strFileUploadPath = ConfigurationManager.AppSettings
["FileUplodePath"].ToString();
//自定義文件名
Random rd = new Random();
int num1 = rd.Next(1000, 9999);
string Fname = num1.ToString()+ name;//得到自定義文件名
//合成物理路徑
string strFilePhysicalPath = strFileUploadPath+"\\"+Fname;
hfc[i].SaveAs(strFilePhysicalPath);
ShowMessageBox("文件上傳成功");
}
else
{
ShowMessageBox("上傳文件太大");
break;
}
}
else
{
ShowMessageBox("請(qǐng)選擇合適文件上傳");
break;
}
}
}
}
配置文件web.comfig設(shè)置
<appSettings>
<!—文件類型設(shè)置-->
<add key="FileTypeLimit" value=".jpg;.bmp;.gif;.png;.jpeg;.pdf;.rar;.xls;.doc;.txt"/>
<!—文件上傳路徑設(shè)置-->
<add key="FileUplodePath" value="F:\\ "/>
<!—文件大小限制kb -->
<add key="FileSizeLimit" value="1000"/>
</appSettings>
有了這些基本可以實(shí)現(xiàn)文件上傳了
FileUpload基本就這些 現(xiàn)在重點(diǎn)看看SWfUpload控件
對(duì)于SWfUpload控件網(wǎng)上介紹很多這里我絕大多數(shù)也是引用 但重要的是怎樣實(shí)現(xiàn)它的強(qiáng)大功能。
SWfUpload控件
SWFUpload使用一個(gè)Flash影片來(lái)控制文件的選擇和上傳。此FLASH中包含一個(gè)用戶自定制UI的按鈕,點(diǎn)擊該按鈕能夠激活
Flash本身的高級(jí)文件上傳對(duì)話框,它能夠根據(jù)用戶的設(shè)置來(lái)進(jìn)行單文件或者是多文件的上傳。
SWFUpload由4部分組成:
1. 初始化和設(shè)置(Javascript)
2. JavaScript 庫(kù): SWFUpload.js
3. SWFUpload.swf(V2.2.0版本放棄了對(duì)flash 8的支持)
4. 事件處理(Javascript)
SWFpload必須在頁(yè)面中初始化,一般可以在window.onload事件中完成此操作。它的構(gòu)造函數(shù)需要一個(gè)Object類型的設(shè)置對(duì)象。 這個(gè)設(shè)置對(duì)象一般是一個(gè)直接定義的Object類型變量,直接傳遞給SWFUpload的構(gòu)造函數(shù)。
初始化的SWFUpload對(duì)象的引用需要保留下來(lái),因?yàn)楫?dāng)顯示文件選擇對(duì)話框和啟動(dòng)文件上傳的時(shí)候需要這個(gè)實(shí)例的
引用。
別的就不多說(shuō)了,相關(guān)的介紹網(wǎng)上很多,可以自己查閱一下
SWFUpload控件是個(gè)組件,自己使用時(shí)并沒(méi)有實(shí)現(xiàn)上傳圖片的水印效果,只是實(shí)現(xiàn)了文件上傳功能
說(shuō)一下主要步驟
一、上傳文件需要 要兩個(gè)頁(yè)面一個(gè)是Default.aspx 還有一個(gè)是upload.aspx
在工程里添加新建項(xiàng)選文件夾 分別添加Flash ,js,images 三個(gè)文件夾
就我的理解簡(jiǎn)單說(shuō)一下: Default頁(yè)面主要進(jìn)行頁(yè)面初始化,而upload頁(yè)面主要執(zhí)行文件上傳
Flash文件夾中存放swfupload.swf 文件, js文件夾存放handlers.js 、swfupload.js文件,
images文件夾主要存放按鈕圖片swfupload_uploadBtn.png(隨便其他按鈕圖片也行要和初始化文件路徑中的一致)
二、以上所需文件都需要從網(wǎng)上下載下載一個(gè)SWFUpload組件的demo里面會(huì)包含我們所需的文件
當(dāng)然Default新建項(xiàng)目會(huì)有,upload頁(yè)面需要自己去添加
提醒下兩個(gè)頁(yè)面最好不要從下載的SWFUpload的demo中附加 那樣應(yīng)該不能實(shí)現(xiàn)功能
Default.aspx代碼
<head runat="server">
<title></title>
<scriptsrc="js/swfupload.js"type="text/javascript"></script>
<script src="js/handlers.js" type="text/javascript"></script>
<script type="text/javascript">
var swfu;
window.onload = function() {
swfu = new SWFUpload({
// 后臺(tái)設(shè)置
upload_url: "upload.aspx", // 文件上傳的處理程序,就是說(shuō),你要在這個(gè)文件對(duì)上傳這
個(gè)動(dòng)作進(jìn)行定義,比如文件保存、重命名之類的,
//如果這個(gè)沒(méi)有具體動(dòng)作的話,文件不會(huì)在服務(wù)器上有任何蹤跡,即文件不會(huì)上傳。
post_params: {
"ASPSESSID": "<%=Session.SessionID %>"
},
//文件上傳設(shè)置
file_size_limit: "2 MB", //上傳大小 單位M
file_types: "*.*", //上傳文件類型
file_types_description: "所有文件類型", //文件類型描述
file_upload_limit: "0", //一次性上傳文件個(gè)數(shù) 0表示沒(méi)有限制
// 事件處理設(shè)置 - these functions as defined in Handlers.js
file_queue_error_handler: fileQueueError,
file_dialog_complete_handler: fileDialogComplete,
upload_progress_handler: uploadProgress,
upload_error_handler: uploadError,
upload_success_handler: uploadSuccess,
upload_complete_handler: uploadComplete,
//按鈕設(shè)置
//這里注意查看自己按鈕圖片路徑是否正確
button_image_url: "images/swfupload_uploadBtn.png",
button_placeholder_id: "spanButtonPlaceholder",
button_width: 200,
button_height: 22,
button_text: '<span class="button">Select File <span
class="buttonSmall">(2MB Max)</span></span>',
button_text_style: '.button { font-family: Helvetica, Arial, sans
-serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',
button_text_top_padding: 1,
button_text_left_padding: 400,
// Flash 設(shè)置查看自己flash文件路徑是否正確
flash_url: "../Flash/swfupload.swf", // Relative to this file
custom_settings: {
upload_target: "divFileProgressContainer"
},
// Debug Settings
debug: false
});
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="header">
<h1 id="logo"><a href="../">SWFUpload</a></h1>
<div id="version">v2.2.0</div>
</div>
<div id="content">
<div id="swfu_container" style="margin: 0px 10px;">
<div>
<span id="spanButtonPlaceholder"></span>
</div>
<div id="divFileProgressContainer" style="height: 75px;"></div>
</div>
</div>
</form>
</body>
</html>
后臺(tái)文件不需要設(shè)置
下面設(shè)置upload.aspx.cs后臺(tái)方法
protected void Page_Load(object sender, EventArgs e)
{
#region
try
{
// Get the data
HttpPostedFile jpeg_image_upload=Request.Files["Filedata"];
//獲取上傳文件后綴
string FileExtension= jpeg_image_upload.FileName.Substring
(jpeg_image_upload.FileName.LastIndexOf("."),
jpeg_image_upload.FileName.Length-
jpeg_image_upload.FileName.LastIndexOf("."));
//自定義文件名稱
Random rd = new Random();
int num1 = rd.Next(1000, 9999);
string Filename= num1.ToString()+ FileExtension;
//文件上傳路徑 配置文件中設(shè)置 與FileUpload控件道理相同
string FileUploadPath = ConfigurationManager.AppSettings["FileUploadPath"];
//文件上傳
jpeg_image_upload.SaveAs(FileUploadPath+Filename);
Response.StatusCode = 200;
Response.Write("文件處理完畢!");
}
catch
{
// If any kind of error occurs return a 500 Internal Server
error
Response.StatusCode = 500;
Response.Write("未知錯(cuò)誤!");
}
finally
{
// Clean up
Response.End();
}
#endregion
}
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@ke049m.cn
文章轉(zhuǎn)載自:feng0808的專欄