使用FileUpload一次上傳多個檔案
- 2008-02-06
- 44311
- 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控制項還是不及其他元件漂亮,尤其在上傳的時候完全沒有顯示,如果上傳速度不佳,使用者甚至會以為系統當機了。
回應討論