• 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: empuploads";

    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,我都测试过。   这个技巧都通用!

    2012/9/5补充:另外一种作法,请参阅  http://www.allenkuo.com/userfiles/share/2012q3/2012-8-28_08-28-10.png

     

    另外提供一个很棒的 FileUpload范例,也提到 .ashx的作法(作者:Y2J

    [ASP.NET] 在页面上显示上传的图片

    http://www.dotblogs.com.tw/aquarius6913/archive/2013/04/26/102317.aspx?fid=56777

  • 相关阅读:
    java中的subList
    值传递和引用传递
    java程序中有异常处理和没有异常处理的区别
    正则表达式
    poj 3187 三角数问题
    poj 2718 切数问题 穷竭搜索
    ACM 广度优化搜索算法总结
    poj 3669 火星撞地球问题 bfs算法
    poj 2251 三维地图最短路径问题 bfs算法
    ACM 深度优化搜索算法小总结
  • 原文地址:https://www.cnblogs.com/mis2000lab/p/3310365.html
Copyright © 2020-2023  润新知