none
ASP.NET实现下载功能 RRS feed

  • 问题

  • 在IE上点击下载按钮时只是页面刷新了下,就没有反应了,要下载就得左键另存为才行。谷歌浏览器上可以下载rar压缩文件,但是链接是图片的就直接打开了。 

    不晓得怎样来实现下载的功能,直接给了链接,又不是所有的浏览器都能下载。 

    高手们帮帮忙!目标是点击下载后,弹出保存的对话框。 

    部分代码如下: 

    <ul> 
    <li><b>壁纸简介</b></li> 
    <li><asp:Label ID="Label1" runat="server" Text='<%# Eval("wallpaperinfo") %>'></asp:Label></li> 
    <li>下载次数:<%# Eval("wallpaperdownloads")%>   更新时间:<%# Eval("wallpaperAddtime", "{0:d}")%></li> 
    <!--下面这个是实现下载的--> 
    <li><a href='<%# "Wallpaper/"+Eval("photo") %>' target="_blank" > <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="~/img/Down.gif" onclick="ImageButton1_Click" /></a></li> 
    </ul>
    2009年5月20日 14:39

答案

  • 你好!下面的方法可以实现
    ------------------------------------------------------------------------------------------
    .Aspx
    ------------------------------------------------------------------------------------------
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="X200905122103.aspx.cs" Inherits="UpdateLoad_X200905122103" %>
    <!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">
            <asp:Button ID="btnDown" runat="server" onclick="btnDown_Click" Text="下载" />
        </form>
    </body>
    </html>
    
    
    ------------------------------------------------------------------------------------------
    .Aspx.cs
    ------------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    public partial class UpdateLoad_X200905122103 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btnDown_Click(object sender, EventArgs e)
        {
            // 1 弹出对话框提示下载文件(不会开新窗口)
            // 2 隐藏路径
            string fPath = Path.Combine(Server.MapPath("Images"), "Winter.jpg");
            FileStream fFileStream = new FileStream(fPath, FileMode.Open);
            long fFileSize = fFileStream.Length;
            Context.Response.ContentType = "application/octet-stream";
            Context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(Path.GetFileName(fPath), System.Text.Encoding.UTF8) + "\"");
            Context.Response.AddHeader("Content-Length", fFileSize.ToString());
            byte[] fFileBuffer = new byte[fFileSize];
            fFileStream.Read(fFileBuffer, 0, (int)fFileSize);
            fFileStream.Close();
            Context.Response.BinaryWrite(fFileBuffer);
            Context.Response.End();
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月21日 5:02
    2009年5月20日 14:54
    版主

全部回复

  • 你好!下面的方法可以实现
    ------------------------------------------------------------------------------------------
    .Aspx
    ------------------------------------------------------------------------------------------
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="X200905122103.aspx.cs" Inherits="UpdateLoad_X200905122103" %>
    <!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">
            <asp:Button ID="btnDown" runat="server" onclick="btnDown_Click" Text="下载" />
        </form>
    </body>
    </html>
    
    
    ------------------------------------------------------------------------------------------
    .Aspx.cs
    ------------------------------------------------------------------------------------------
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    public partial class UpdateLoad_X200905122103 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        protected void btnDown_Click(object sender, EventArgs e)
        {
            // 1 弹出对话框提示下载文件(不会开新窗口)
            // 2 隐藏路径
            string fPath = Path.Combine(Server.MapPath("Images"), "Winter.jpg");
            FileStream fFileStream = new FileStream(fPath, FileMode.Open);
            long fFileSize = fFileStream.Length;
            Context.Response.ContentType = "application/octet-stream";
            Context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlEncode(Path.GetFileName(fPath), System.Text.Encoding.UTF8) + "\"");
            Context.Response.AddHeader("Content-Length", fFileSize.ToString());
            byte[] fFileBuffer = new byte[fFileSize];
            fFileStream.Read(fFileBuffer, 0, (int)fFileSize);
            fFileStream.Close();
            Context.Response.BinaryWrite(fFileBuffer);
            Context.Response.End();
        }
    }
    
    


    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月21日 5:02
    2009年5月20日 14:54
    版主
  • “long”不包含“Length”的定义,并且找不到可接受类型为“long”的第一个参数的扩展方法

    没看太懂

    string fPath = Path.Combine(Server.MapPath("Images"), "Winter.jpg");这句不是指定路径的么?Images是指文件所在文件夹,Winter.jpg是指什么?

    没看到从那个指定文件名,是filename么?

     麻烦老师了
    2009年5月20日 16:38
  • Server.MapPath("Images") 是获取 image 文件夹所在的路径
    Winter.jpg 是你要下载的文件名(在image文件夹下)

    知识改变命运,奋斗成就人生!
    2009年5月21日 1:10
    版主
  • 你好,
    Path.Combine,就是合并两个路径字符串
    比如如下调用,Path.Combine(@"C:\11","aa.txt") 返回的字符串路径如后: C:\11\aa.txt

    邹俊才
    2009年5月21日 1:57
    版主