• ASP.NET 文件的上传与下载


    前端页面:

     1 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="FileOption.aspx.cs" Inherits="FileOption" %>
     2 
     3 <!DOCTYPE html>
     4 
     5 <html xmlns="http://www.w3.org/1999/xhtml">
     6 <head runat="server">
     7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
     8     <title></title>
     9     <style type="text/css">
    10         .auto-style1 {
    11             width: 100%;
    12         }
    13         .auto-style2 {
    14             width: 121px;
    15         }
    16     </style>
    17 </head>
    18 <body>
    19     <form id="form1" runat="server">
    20     <div>
    21     
    22         <table class="auto-style1">
    23             <tr>
    24                 <td class="auto-style2">文件名称:</td>
    25                 <td>
    26                     <asp:TextBox ID="txtFileName" runat="server"></asp:TextBox>
    27                 </td>
    28             </tr>
    29             <tr>
    30                 <td class="auto-style2">浏览:</td>
    31                 <td><asp:FileUpload ID="UploadFile" runat="server"/></td>
    32             </tr>
    33             <tr>
    34                 <td class="auto-style2">&nbsp;</td>
    35                 <td>
    36                     <asp:Button ID="btnFile" runat="server" OnClick="btnFile_Click" Text="上传" />
    37                     <asp:Label ID="msg" runat="server" ForeColor="Red"></asp:Label>
    38                 </td>
    39             </tr>
    40         </table>
    41     </div>
    42         <asp:Repeater ID="Repeater1" runat="server" onitemcommand="down_file_Click">
    43             <ItemTemplate>
    44                 <table>
    45                     <tr>
    46                         <td >文件名称:</td>
    47                         <td><b><asp:Label ID="FileTitle" runat="server" Text='<%#Eval("文件名称") %>'></asp:Label></b></td>
    48                         <td>类型:</td>
    49                         <td><%#Eval("类型") %></td>                
    50                         <td>文件大小:</td>
    51                         <td><%#Eval("文件大小") %>KB</td>
    52                         <td>上传时间:</td>
    53                         <td ><%#Eval("上传时间") %></td>
    54                         <td ><asp:LinkButton ID="LinkButton1" CommandArgument='<%#Eval("link") %>' runat="server">下载文件</asp:LinkButton> </td>
    55                     </tr>           
    56                 </table>
    57                 <br />
    58             </ItemTemplate>
    59         </asp:Repeater>
    60     </form>
    61 </body>
    62 </html>
    View Code

    后台实现代码:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using System.Web.UI;
      6 using System.Web.UI.WebControls;
      7 using System.IO;
      8 using System.Data;
      9 using System.Text;
     10 
     11 public partial class FileOption : System.Web.UI.Page
     12 {
     13     protected void Page_Load(object sender, EventArgs e)
     14     {
     15         GrvDataBin(FindFile());
     16     }
     17     /// <summary>
     18     /// 上传文件
     19     /// </summary>
     20     /// <param name="sender"></param>
     21     /// <param name="e"></param>
     22     protected void btnFile_Click(object sender, EventArgs e)
     23     {
     24         msg.Text = "";
     25         //自定义的 File 类
     26         File file = new File();
     27         if (string.IsNullOrEmpty(txtFileName.Text))
     28         {
     29             msg.Text = "请输入文件名称!";
     30             return;
     31         }
     32         if (UploadFile.HasFile)
     33         {
     34             try
     35             {
     36                 DateTime upload = DateTime.Now;
     37                 //获取文件的扩展名(文件类型)
     38                 string type = Path.GetExtension(UploadFile.PostedFile.FileName);
     39                 //设置上传文件的路径
     40                 string path = Server.MapPath("Upload/" + txtFileName.Text + type);
     41                 //获取文件的大小
     42                 string size = (UploadFile.PostedFile.ContentLength / 1024).ToString();
     43                 //保存文件(保存到服务器指定路径中)
     44                 UploadFile.SaveAs(path);
     45                 msg.Text = "上传成功!";
     46                 //上传成功后更新数据
     47                 GrvDataBin(FindFile());
     48             }
     49             catch (Exception err)
     50             {
     51                 msg.Text = "上传失败!" + err.Message;
     52             }
     53         }
     54         else
     55             msg.Text = "请选择文件!";
     56     }
     57     /// <summary>
     58     /// 获取指定目录下的所有文件的集合
     59     /// </summary>
     60     /// <returns>返回一个File类的集合</returns>
     61     private List<File> FindFile()
     62     {
     63         string path = Server.MapPath("Upload/");//获取文件所在目录
     64         string[] paths = Directory.GetFiles(path);//获取目录中所有文件路径
     65         List<File> list = new List<File>();
     66         foreach(string filePath in paths)
     67         {
     68             string size = 0.ToString();
     69             string time = DateTime.Now.ToShortTimeString();
     70             GetFileSize(filePath,out size,out time);
     71             File file = new File(filePath,size,time);
     72             list.Add(file);
     73         }
     74         return list;
     75     }
     76     /// <summary>
     77     /// 绑定文件数据信息
     78     /// </summary>
     79     /// <param name="list">传入的文件集合</param>
     80     public void GrvDataBin(List<File> list)
     81     {
     82 
     83         DataView dv = new DataView();
     84         DataTable dt = new DataTable("fileMeta");
     85         {
     86             dt.Columns.Add("文件名称");
     87             dt.Columns.Add("类型");
     88             dt.Columns.Add("上传时间");
     89             dt.Columns.Add("文件大小");
     90             dt.Columns.Add("link");
     91         }
     92         foreach (File fileM in list)
     93         {
     94             DataRow row = dt.NewRow();
     95             row[0] = fileM.FileName;
     96             row[1] = fileM.Type;
     97             row[2] = fileM.UploadTime;
     98             row[3] = fileM.Size;
     99             row[4] = fileM.FilePath;
    100             dt.Rows.Add(row);
    101         }
    102         dv.Table = dt;
    103         Repeater1.DataSource = dv;
    104         Repeater1.DataBind();
    105     }
    106     /// <summary>
    107     /// 获取文件大小和时间
    108     /// </summary>
    109     /// <param name="filePath"></param>
    110     /// <returns></returns>
    111     private string GetFileSize(string filePath,out string size,out string time)
    112     {
    113         FileInfo file = new FileInfo(filePath);
    114         size =(Convert.ToDouble(file.Length)/1024.0).ToString("0.00");
    115         time = file.CreationTime.ToShortTimeString();
    116         return null;
    117     }
    118     /// <summary>
    119     /// 文件下载
    120     /// </summary>
    121     /// <param name="sender"></param>
    122     /// <param name="e"></param>
    123     protected void down_file_Click(object sender, RepeaterCommandEventArgs e)
    124     {//注释的为流下载
    125         //FileStream fs = null;
    126         try
    127         { 
    128             // 获取文件的路径
    129             string filePath = e.CommandArgument.ToString();
    130             // 获取文件的名称
    131             string fileName = ((Label)e.Item.FindControl("FileTitle")).Text.ToString();
    132             //fs = System.IO.File.OpenRead(filePath);
    133             //long count = 1024;
    134             //byte[] buffer = new byte[count];
    135             //Response.Buffer = true;
    136             // 设置输出流的 MIME 类型
    137             Response.ContentType = "application/octet-stream";
    138             // 通知浏览器下载而不是打开  
    139             Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(fileName));//下载时要保存的默认文件名
    140             //while (count == 1024)
    141             //{
    142             //    count = fs.Read(buffer, 0, 1024);
    143             //    Response.BinaryWrite(buffer);
    144             //    Response.Flush();
    145             //    Response.End();
    146             //}
    147             Response.TransmitFile(filePath);
    148             Response.Flush();
    149             Response.End();
    150         }
    151         catch (Exception)
    152         {
    153             return;
    154         }
    155         finally
    156         {
    157             //fs.Close();
    158         }
    159 
    160     }
    161 }
    View Code

    自定义的File 类用于保存文件的属性

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    
    /// <summary>
    /// File 的摘要说明
    /// 自定义的文件信息类
    /// </summary>
    public class File
    {
        #region private prop
        private string fileName;
        private string type;
        private string size;
        private string filePath;
        private string uploadTime;
        #endregion
        #region public prop
        public string Type
        {
            get
            {
                return type;
            }
    
            set
            {
                type = value;
            }
        }
    
        public string Size
        {
            get
            {
                return size;
            }
    
            set
            {
                size = value;
            }
        }
    
        public string FilePath
        {
            get
            {
                return filePath;
            }
    
            set
            {
                filePath = value;
            }
        }
    
        public string UploadTime
        {
            get
            {
                return uploadTime;
            }
    
            set
            {
                uploadTime = value;
            }
        }
    
        public string FileName
        {
            get
            {
                return fileName;
            }
    
            set
            {
                fileName = value;
            }
        }
        #endregion
        public File()
        {
            //初始化文件大小
            Size = (1024 * 1024).ToString();
        }
    
        public File(string filePath,string size,string time)
        {
            FilePath = filePath;
            string[] names = filePath.Split('\');
            FileName = names[names.Length-1];
            Type = filePath.Split('.')[1];
            Size = size;
            UploadTime = time;
        }
    }
    View Code

    这样简单的文件上传与下载就完成了。。。。

    附上效果图:

    文章未经版主同意不可任意转载,如有需要请标明文章出处。
  • 相关阅读:
    解析大型.NET ERP系统 权限模块设计与实现
    Enterprise Solution 开源项目资源汇总 Visual Studio Online 源代码托管 企业管理软件开发框架
    解析大型.NET ERP系统 单据编码功能实现
    解析大型.NET ERP系统 单据标准(新增,修改,删除,复制,打印)功能程序设计
    Windows 10 部署Enterprise Solution 5.5
    解析大型.NET ERP系统 设计异常处理模块
    解析大型.NET ERP系统 业务逻辑设计与实现
    解析大型.NET ERP系统 多国语言实现
    Enterprise Solution 管理软件开发框架流程实战
    解析大型.NET ERP系统 数据审计功能
  • 原文地址:https://www.cnblogs.com/qihangzj/p/7650846.html
Copyright © 2020-2023  润新知