demoshop

demo, trying to be the best_

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

回應討論