閃光區
demo當選微軟2009年度第三季最有價值專家
demo獲得藍色小舖2009高級專家認證
demo獲得藍色小舖2009資訊專家貢獻獎
認證徽章
工商時間
 
demo小鋪

使用FileUpload一次上傳多個檔案

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控制項還是不及其他元件漂亮,尤其在上傳的時候完全沒有顯示,如果上傳速度不佳,使用者甚至會以為系統當機了。

 
 
加入此網頁到:Google Bookmarks
加入此網頁到:Yahoo! My Web
加入此網頁到:Baidu
加入此網頁到:MyShare
加入此網頁到:udn
加入此網頁到:furl
加入此網頁到:Del.icio.us
加入此網頁到:YouPush
加入此網頁到:Digg
加入此網頁到:你推我報
加入此網頁到:technorati
加入此網頁到:HemiDemi
 
相關的文章(隨機)

將本文推到 Plurk
將本文推到 Facebook
將本文推到 Twitter
將本文產生 PDF 保存
 

網友留言
目前尚無評論...
新增評論
* 暱稱
E-mail (本站使用Gravatar頭像E-mail不會顯示於網站上)
不填寫email將不會收到回復通知。
網站
* 評論
不打勾才可留言
demo小鋪
 ....