zoukankan      html  css  js  c++  java
  • asp.net中实现文件批量上传!你会了吗?

      今天BOSS要求做一个批量上传文件的功能,忙活了半天,总算搞定,希望前辈们多加指点,下面来看一下效果图(这里是简化版,只介绍了主要实现过程,没有美化,勿怪!勿怪!):

    单击添加文件,将自动添加FileUpload控件。

    单击浏览分别选择要上传的多个文件

    单击上传文件,完成文件的上传。

    好了不多说,下面是代码:

    前台Default.aspx代码

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>批量上传文件</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div style="300px; margin:50px auto;">
          <asp:Label ID="LblMessage" runat="server" Width="300px" ForeColor="#FF0033" Font-Bold="True" Font-Size="Small" />
          <table border="1" bordercolor="gray" style="border-collapse: collapse;">
            <tr>
              <td style="text-align: center; font-size:10pt; font-weight:bold; color:DimGray;">
                 批量上传文件
              </td>
            </tr>
            <tr>
              <td>
                 <asp:Panel ID="Pan_UpFile" runat="server" Height="200px" ScrollBars="Auto" Width="250px">
                   <table id="Tab_UpDownFile" runat="server" cellpadding="0" cellspacing="0" enableviewstate="true">
                      <tr>
                         <td style=" 100px; height: 30px">
                            <asp:FileUpload ID="FileUpload1" runat="server"/>
                         </td>
                      </tr>
                  </table>
                </asp:Panel>
              </td>
            </tr>
            <tr>
              <td>        
                <asp:Button ID="BtnAdd" runat="server" Text="添加文件" OnClick="BtnAdd_Click" BorderColor="Gray" BorderWidth="1px" />
                <asp:Button ID="BtnUpFile" runat="server" OnClick="BtnUpFile_Click" Text="上传文件" BorderColor="Gray" BorderWidth="1px" />
              </td>
            </tr>
          </table>
         </div>
        </form>
    </body>
    </html>

    Default.aspx.cs代码(注释有一定说明,都能看懂吧?)

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Collections;//引入命名空间
    
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)//首次执行页面
            {
                SFUPC();
            }
        }
        #region  该方法用于将当前页面上传文件控件集保存到Session中
        private void SFUPC()
        {
            ArrayList AL = new ArrayList();//动态增加数组
            foreach (Control C in Tab_UpDownFile.Controls)
            {
                //在表格中查找出FileUpload控件添加到ArrayList中
                if (C.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlTableRow")
                {
                    HtmlTableCell HTC = (HtmlTableCell)C.Controls[0];
                    foreach (Control FUC in HTC.Controls)
                    {
                        if (FUC.GetType().ToString() == "System.Web.UI.WebControls.FileUpload")
                        {
                            FileUpload FU = (FileUpload)FUC;
                            //设置FileUpload的样式
                            FU.BorderColor = System.Drawing.Color.DimGray;
                            FU.BorderWidth = 1;
                            //添加FileUpload控件
                            AL.Add(FU);
                        }
                    }
                }
            }
    
            //把ArrayList添加到Session中
            Session.Add("FilesControls", AL);
        }
        #endregion
    
        #region 该方法用于添加一个上传文件的控件
        private void InsertC()
        {
            //实例化ArrayList
            ArrayList AL = new ArrayList();
            this.Tab_UpDownFile.Rows.Clear(); //清除id为F表格里的所有行
            GetInfo();
            //表示 HtmlTable 控件中的 <tr> HTML 元素
            HtmlTableRow HTR = new HtmlTableRow();
            //表示 HtmlTableRow 对象中的 <td> 和 <th> HTML 元素
            HtmlTableCell HTC = new HtmlTableCell();
            //在单元格中添加一个FileUpload控件
            HTC.Controls.Add(new FileUpload());
            //在行中添加单元格
            HTR.Controls.Add(HTC);
            //在表中添加行
            Tab_UpDownFile.Rows.Add(HTR);
            SFUPC();
        }
        #endregion
    
        #region 该方法用于将保存在Session中的上传文件控件集添加到表格中
        private void GetInfo()
        {
            ArrayList AL = new ArrayList();
            if (Session["FilesControls"] != null)
            {
                AL = (ArrayList)Session["FilesControls"];
                for (int i = 0; i < AL.Count; i++)
                {
                    HtmlTableRow HTR = new HtmlTableRow();
                    HtmlTableCell HTC = new HtmlTableCell();
                    HTC.Controls.Add((System.Web.UI.WebControls.FileUpload)AL[i]);
                    HTR.Controls.Add(HTC);
                    Tab_UpDownFile.Rows.Add(HTR);
                }
            }
        }
        #endregion
    
        #region 该方法用于执行文件上传操作
        private void UpFile()
        {
    
            //获取文件夹路径
            string FilePath = Server.MapPath("./") + "File";
    
            // 获取客户端上载文件的集合
            HttpFileCollection HFC = Request.Files;
            for (int i = 0; i < HFC.Count; i++)
            {
                //访问指定的文件
                HttpPostedFile UserHPF = HFC[i];
                try
                {
                    //判断文件是否为空
                    if (UserHPF.ContentLength > 0)
                    {
                        //将上传的文件存储在指定目录下
                        UserHPF.SaveAs(FilePath + "\\" + System.IO.Path.GetFileName(UserHPF.FileName));
                    }
                }
                catch
                {
                    LblMessage.Text = "上传失败!";
                }
            }
            if (Session["FilesControls"] != null)
            {
                Session.Remove("FilesControls");
            }
            LblMessage.Text = "上传成功!";
    
        }
        #endregion
        #region 调用InsertC方法,实现添加FileUpLoad控件的功能
        protected void BtnAdd_Click(object sender, EventArgs e)
        {
            InsertC();//执行添加控件方法
            LblMessage.Text = "";
        }
        #endregion
        #region 实现文件上传的功能
        protected void BtnUpFile_Click(object sender, EventArgs e)
        {
            if (this.FileUpload1.PostedFile.FileName != "")
            {
                UpFile();//执行上传文件
                SFUPC();
            }
            else
            {
                 LblMessage.Text = "对不起,上传文件为空,请选择上传文件!";
            }
    
        }
        #endregion
    
    }

    完!

    请读者根据实际情况做适当修改!

  • 相关阅读:
    C# 模拟串口发送接收
    maven update解决TypeMismatchException
    [转载]JUnit3 与 JUnit4 的区别
    JUnit版本导致eclipse的build path加入的Maven Dependencies没起作用
    [转载][oracle]使用exp导出数据的日志中报warning如EXP-00091 Exporting questionable statistics
    [框架][MyBatis]MyBatis集锦
    [转载][工具]Secure CRT 自动记录日志和时间戳功能配置的方法
    jUnit Test遇到org.apache.ibatis.binding.BindingException
    [转载[工具]]PLSQL使用技巧
    [转载][工具]Eclipse Console 加大显示的行数,禁止弹出
  • 原文地址:https://www.cnblogs.com/52net/p/2549174.html
Copyright © 2011-2022 走看看