使用FileUpload一次上傳多個檔案
- 2008-02-06
- 46206
- 0
asp.net內建的FileUpload控制項,可以上傳檔案,但是一次只能傳一個,如果我們希望一次讓使用者多上傳幾個檔案該怎麼辦呢?很簡單多拉幾個FileUpload出來就好了...
◆aspx頁面我們拉了三個FileUpload控制項一個Label和一個Button
<asp:fileupload runat="server" id="FileUpload1"></asp:fileupload> <asp:fileupload runat="server" id="FileUpload2"></asp:fileupload> <asp:fileupload runat="server" id="FileUpload3"></asp:fileupload> <asp:button text="上傳" onclick="Button1_Click" runat="server" id="Button2"></asp:button> <asp:label forecolor="Red" runat="server" id="Label2"></asp:label>
◆程式頁面如下
▲先宣告一個全域變數
//宣告一個全域變數來盼定是否有檔案 bool checkUploadHasFile = false;
▲再來在Button1_Click事件中撰寫以下code
protected void Button1_Click(object sender, EventArgs e)
{
int i;
for (i = 1; i < 4; i++)//我們只拉3個FileUpload出來
{
upload((FileUpload)this.FindControl(string.Format("FileUpLoad{0}", i)));//調用upload方法
}
}
▲上面調用到upload方法所以也要有以下code
#region upload方法
private void upload(FileUpload myFileUpload)
{
//檔案是否超過2MB
if (myFileUpload.PostedFile.ContentLength < 2048000)
{
//宣告一個ViewState做錯誤處理
ViewState["messagePhoto"] = "";
//取得網站根目錄
string path = HttpContext.Current.Request.MapPath("~/");
//檢查是否有檔案
if (myFileUpload.HasFile)
{
try
{
//儲存檔案到您指定的位子
myFileUpload.SaveAs(path + myFileUpload.FileName);
}
catch (Exception ex)
{
ViewState["messagePhoto"] += ex.Message + "<br/>";
}
}
else
{
//顯查是否有選擇檔案
if (checkUploadHasFile == false && !hasFile())
{
ViewState["messagePhoto"] = "沒檔案上傳!!";
}
}
}
else
{
ViewState["messagePhoto"] = "檔案超過2MB!!";
}
//秀出錯誤訊息
this.Label1.Text = ViewState["messagePhoto"].ToString();
}
#endregion
▲上面在檢查有沒有檔案的時候也調用了hasFile方法
#region 檢查FileUpload是否有檔案
private bool hasFile()
{
int i;
for (i = 1; i < 3; i++)
{
if (((FileUpload)this.FindControl(string.Format("FileUpload{0}", i))).HasFile)
{
checkUploadHasFile = true;
return true;
}
}
return false;
}
#endregion
這只是最簡單的多檔案上傳,可以加入的功能還有限定上傳的副檔名、如重複檔名自動更名等等功能,像demo就將上傳和壓縮圖檔的功能結合在一起,這樣子就可以完成相簿的上傳壓縮了,但是FileUpload控制項還是不及其他元件漂亮,尤其在上傳的時候完全沒有顯示,如果上傳速度不佳,使用者甚至會以為系統當機了。








回應討論