1. 程式人生 > >如何使使用者能下載伺服器中的檔案

如何使使用者能下載伺服器中的檔案

本功能主要是利用HttpResponse類中的公共方法來實現的。
原始碼如下:
web頁面檔案(*.aspx)原始碼如下:
<body>
    <form id="form1" runat="server">
    <table width="90%" align="center" border="0">
        <tr>
            <td align="center" style="height: 156px">
                <asp:ListBox ID="ListBox1" Runat="server" Rows="6" Width="371px" Height="144px" />
            </td>
        </tr>
        <tr>
            <td align="center">
                <br />
                <input id="Button1" runat="server"
                      type="button"
                      value="下載選擇的檔案"
                      style="width: 372px" onserverclick="Button1_ServerClick" />
                </td>
        </tr>
    </table>
    </form>
</body>
web頁面檔案配置原始碼(*.aspx.cs)如下:
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {       
        if (!Page.IsPostBack)
        {
            //獲取下載資料夾的所有影象檔案
            String[] MyFiles = Directory.GetFiles(Server.MapPath("Images"));
            //顯示不帶路徑的影象檔名
            for (int index = 0; index < MyFiles.Length; index++)
            {
                MyFiles[index] = new FileInfo(MyFiles[index]).Name;
            }
            //設定列表控制元件資料來源
            ListBox1.DataSource = MyFiles;
            ListBox1.DataBind();
            ListBox1.SelectedIndex = 0;
        }
    }
    protected void Button1_ServerClick(object sender, EventArgs e)
    {//下載選擇的檔案
        FileInfo MyFileInfo;
        String MyFileName= Server.MapPath("Images") + "//" +
               this.ListBox1.SelectedItem.Text;
        MyFileInfo = new FileInfo(MyFileName);
        Response.Clear();
        Response.AddHeader("Content-Disposition",
               "attachment; filename=" + this.ListBox1.SelectedItem.Text);
        Response.AddHeader("Content-Length",MyFileInfo.Length.ToString());
        Response.ContentType = "application/octet-stream";
        Response.WriteFile(MyFileName);
        Response.End();
    }
}