1. 程式人生 > >c# 文件下載

c# 文件下載

服務器 source bin 文件名 turn ppa footer 輸出 pre

1.首先得顯示出用戶能下載的文件。一般都是在一個目錄下。那第一步就先獲取這個目錄的名稱
string DirectoryPath = Server.MapPath("Upload/");

Server.MapPath()是獲取服務器物理路徑。"."參數表示當前所在的目錄。Upload表示項目下的Upload文件。 當然也可以獲取本地的目錄路徑。然後獲取目錄下面的子文件名稱
string[] filePath = Directory.getFiles(DirectoryPath);

當然展現給用戶的可能不僅僅只是文件名稱,有時候可能要向用戶顯示文件類型、文件大小、上傳時間等。這時候就可以把文件封裝成一個類了。目錄下肯定是有一個或多個文件的,所以用集合來保存。然後這個集合中就有了下載文件的所有信息了。接下來就顯示給用戶。頁面顯示可以用Repeater控件

Repeater控件是一個數據顯示控件,該控件允許通過為列表中顯示的每一項重復使用指定的模板來自定義布局。 具體怎麽用,不做詳解 然後為Repeater綁定數據,綁定數據之後,為Repeater增加OnItemCommand事件。檢測點擊 下載需要獲取文件路徑 文件下載,指定默認名
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(fileName));
寫入響應輸出流
Response.TransmitFile(filePath);

向瀏覽器發送所用緩存。
Response.Flush();
Response.End();

代碼:

1.封裝的存放文件信息的類:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

/// <summary>
/// 封裝文件類
/// </summary>
public class FilesInfo
{
    private string filePath;
    private string fileName;
    private string size;
    private string time;
  
    
public string FileName {get { return fileName; } set { fileName = value; } } public string Size { get { return size; } set { size = value; } } public string Time { get { return time; } set { time = value; } } public string FilePath { get { return filePath; } set { filePath = value; } } public FilesInfo(string filePath) { if (filePath != null) { FileInfo info = new FileInfo(filePath); this.FilePath = filePath; FileName = Path.GetFileName(FilePath); Size = (info.Length / 1024).ToString("0.00"); Time = info.CreationTime.ToString("yyyy/MM/dd hh:mm:ss"); } } }

2.前臺代碼:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
        #tableCss {
            border:1px solid red;
        }

    </style>
</head>
<body>
    <form id="form1" runat="server">
        <div>
           <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
        <HeaderTemplate>
        <table id="Table1"  class="tableCss">  
            <tr>
                <td>
                    文件名稱
                </td>
                 <td>
                    文件大小
                </td>
                 <td>
                    文件創建時間
                </td>
                 <td>
                    文件操作
                </td>
            </tr>
        </HeaderTemplate>              
        <ItemTemplate>
            <tr>
            <td>
                <asp:Label ID="Label1" runat="server" Text=‘<% #Eval("文件名稱") %>‘></asp:Label>
            </td>
            <td>
                <asp:Label ID="Label2" runat="server" Text=‘<%#Eval("文件大小") %>‘></asp:Label> 
            </td>
            <td>
                <asp:Label ID="Label3" runat="server" Text=‘<%#Eval("文件創建時間") %>‘></asp:Label>
            </td>
            <td>
                <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument=‘<%#Eval("link") %>‘>下載文件</asp:LinkButton>
            </td>
            </tr>
        </ItemTemplate>       
        <FooterTemplate> 
           </table>       
        </FooterTemplate>   
        </asp:Repeater> 
        </div>
    </form>
</body>
</html>

後臺代碼:

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        BindingData(GetFileNames());
    }
    /// <summary>
    /// 獲取目錄下的文件
    /// </summary>
    /// <returns>存放文件信息的集合</returns>
    public List<FilesInfo> GetFileNames()
    {
        string[] filePath = Directory.GetFiles(@"H:\c#練習");
        List<FilesInfo> FilesInfos = new List<FilesInfo>();
        foreach (string fileNames in filePath)
        {
            FilesInfo info = new FilesInfo(fileNames);
            FilesInfos.Add(info);
        }
        return FilesInfos;
    }
    /// <summary>
    /// 給控件綁定數據
    /// </summary>
    /// <param name="info"></param>
    public void BindingData(List<FilesInfo> info)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("文件名稱");
        dt.Columns.Add("文件大小");
        dt.Columns.Add("文件創建時間");
        dt.Columns.Add("link");
        foreach (FilesInfo files in info)
        {
            DataRow row = dt.NewRow();
            row[0] = files.FileName;
            row[1] = files.Size;
            row[2] = files.Time;
            row[3] = files.FilePath;
            dt.Rows.Add(row);
        }
        Repeater1.DataSource = dt;
        Repeater1.DataBind();
    }


    protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        string filePath = e.CommandArgument.ToString();
        string fileName = Path.GetFileNameWithoutExtension(filePath);
        Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(fileName));
        Response.TransmitFile(filePath);
        Response.Flush();
        Response.End();
    }
}

c# 文件下載