此為文章備份,原文請看我的網站:

FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例--以「流水號」產生「變數名稱」

http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819.aspx

 

 

 

之前的兩個範例:

[C# / ASP.NET]FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例(C#語法)

[VB / ASP.NET]FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例 (VB語法)

 

 

昨天上課時,有個學員拿這個範例來與我討論,希望把寫法作一下修改:

 

==== HTML畫面設計 =====

    首先,進行HTML畫面的設計,

    多重檔案、批次上傳......在畫面上使用多個 FileUpload控制項,然後搭配一個按鈕控制項即可

    

 

==== 後置程式碼 =====

    初學者也可以乖乖地用五個 if判別式來作

    (一個 FileUpload控制項,就作一次,    程式碼不斷COPY 修改即可)。

    只要程式能順利執行,而且您又是剛剛入門的初學者......沒人敢說這樣做不好。

    以下是範例:

if (FileUpload1.HasFile)
{
          string fileName = FileUpload1.FileName;

          //……內容與上面範例相同,在此省略…… 

          FileUpload1.SaveAs(savePath);               
          myLabel.Append("<br>檔名---- " + fileName);
 }

if (FileUpload2.HasFile)
{
          string fileName = FileUpload2.FileName;
          //……省  略……
          FileUpload2.SaveAs(savePath) ;     
}

if (FileUpload3.HasFile)
{
          string fileName = FileUpload3.FileName;
          //……省  略……
          FileUpload3.SaveAs(savePath) ;     
}

//……以此類推……  這種Copy / Paste的作法很累吧~

 

學生(初學者)還在學習中,所以寫出上面的程式,我不會責怪他,畢竟能正確執行更重要。

但如果進入業界,還用這種 Copy / Paste的方法來寫程式,可能會被前輩「唸」一頓

 

****************************************************************************************************************************

第一次改良:

    學員原本提供的作法:

01 protected void Button1_Click(object sender, EventArgs e)
02 {
03     //== 方法一。 ==========================================
04     BatchFileUpload(FileUpload1);  //==自己寫的function
05     BatchFileUpload(FileUpload2);
06     BatchFileUpload(FileUpload3);
07     BatchFileUpload(FileUpload4);
08     BatchFileUpload(FileUpload5);
09 }
10  
11  
12 //***********************************************************
13 protected void BatchFileUpload(FileUpload myFL)
14 {
15     String savePath = @"d:\temp\uploads\";
16  
17     if (myFL.HasFile)
18     {
19         String fileName = myFL.FileName;
20  
21         savePath = savePath + fileName;
22         myFL.SaveAs(savePath);
23  
24         Label1.Text += "上傳成功,檔名---- " + fileName;
25     }
26  
27 }

 

上面的作法是把重複的程式,寫成一個 function來呼叫

不斷地傳入「FileUpload控制項」就能完成多重檔案的上傳。

 

 

****************************************************************************************************************************

第二次改良:

    上述的範例,可以利用 「流水號」產生「變數名稱」 來縮減

 

    protected void Button1_Click(object sender, EventArgs e)
    {
        //== 兩種作法,任選其一 ===================================
 
        //== 方法一。 ==========================================
        // BatchFileUpload(FileUpload1);  //==自己寫的function
        // BatchFileUpload(FileUpload2);
        // BatchFileUpload(FileUpload3);
        // BatchFileUpload(FileUpload4);
        // BatchFileUpload(FileUpload5);
 
        //== 方法二。改寫如下 =====================================
         //== 透過  for 迴圈,以字串相連的方式,做出流水號(連號)的 「變數名稱」
 
        for (int i = 1; i <= Request.Files.Count; i++)
        {
            //***************************************************************
            FileUpload myFL = (FileUpload)Page.Form.FindControl("FileUpload" + i);
            //***************************************************************
 
            BatchFileUpload(myFL);  //==自己寫的function
        }
    }
 
 
    protected void BatchFileUpload(FileUpload myFL)
    {
        //-- 註解:先設定好檔案上傳的路徑,這是Web Server電腦上的目錄。
        //       C#語法在撰寫磁碟的目錄位置時,請留意以下的寫法:
        String savePath = "d:\\temp\\uploads\\";
 
        if (myFL.HasFile)
        {
            String fileName = myFL.FileName;
 
            savePath = savePath + fileName;
            myFL.SaveAs(savePath);
 
            Label1.Text += "<br />上傳成功,檔名---- " + fileName;
        }

 

上面的作法(以「流水號」產生「變數名稱」

    在書本「上集」的聊天室、多重檔案上傳

    書本「下集」的自動化投票區,都有用到相同的技巧。

 

從以前的 ASP到目前的 ASP.NET,包含 PHP與 JSP,我都測試過。   這個技巧都通用!

 

 

 

此為文章備份,原文請看我的網站:

FileUpload控制項「批次上傳 / 多檔案同時上傳」的範例--以「流水號」產生「變數名稱」

http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819.aspx

 

arrow
arrow
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()