demoshop

NEWS

demo, trying to be the best.

站內搜尋載入中...

使用FileUpload一次上傳多個檔案

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