用户点击一个按钮,就下载别的网站上的一个文件,比如:http://www.163.com/aaa.exe,
这时需要客户端只看到aaa.exe字样,看不到http://www.163.com/aaa.exe的完整连接,
即使从网页的源代码中也看不到这个完整的链接。该怎么实现

解决方案 »

  1.   

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;namespace X
    {
    /// <summary>
    /// Img 的摘要说明。
    /// </summary>
    public class Y : System.Web.UI.Page
    {
    private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    Response.BinaryWrite(你的exe文件的2进制流);
    Response.ContentType = "application/x-msdownload";
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion
    }
    }
      

  2.   

    <%@ Page language="c#" Codebehind="Img.aspx.cs" AutoEventWireup="false" Inherits="X.Y" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    </form>
    </body>
    </HTML>------------
    X.aspx
      

  3.   

    谢谢踏雪无痕,可是我怎么获得不了exe文件的二进制流那?我用下面的代码:public static byte[] GetUrlBytes( string url )
    {
    try
    {
    byte[] bytes = null;
    WebRequest myWebRequest=WebRequest.Create(url); // Assign the response object of 'WebRequest' to a 'WebResponse' variable.
    WebResponse myWebResponse=myWebRequest.GetResponse();
    System.IO.Stream stream = myWebResponse.GetResponseStream();
    stream.Read( bytes , 0 , (int)stream.Length );  <--执行到这句出错 return bytes; }
    catch( System.Exception e )
    {
    return null;
    }

    }执行的时候报错:此流不支持查找操作。那么到底该怎么获得别人网站上面的exe或者rar文件的二进制流那?
    请指教,谢谢
      

  4.   

    可以点击按钮时动态生成一个窗口,将你的下载操作放在新窗口中!
    放送一个连接的ID到新窗口中,在新窗口中取实际的下载地址
    最后将新窗口关闭
    不过你要想不让屏蔽你的下载的地址可不容易
    只要允许FlashGet下载就知道是在那里下的!
      

  5.   

    kuibobo(^踏雪无痕)的方法好处在于可以对下载的文件进行权限控制等。如果不是非常保密的东西还是直接给连接算了。
      

  6.   

    >kuibobo(^踏雪无痕)的方法好处在于可以对下载的文件进行权限控制等。如果不是非常保密的东西还是直接给连接算了。那可不行,有的网站不让别人链接到它上面能下载的文件,所以一定要将完整的链接隐藏起来
      

  7.   

    楼主要做坏事么?下载一些病毒?
    下载可以均指向一个页面,然后根据参数Response.BinaryWrite具体的文件。
      

  8.   

    lz你页可以用URL重写相关内容可到ms的msdn中文网上查 URL重写
      

  9.   

    url重写的确可以搞定。不过,我给你推荐http forward。好久不aspnet了,好像是xxx.execute(string,boolean)。
      

  10.   

    Response.BinaryWrite 可以实现,不过如果文件比较大还是不要用这个,,,很吃内存的~~~
      

  11.   

    Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment; filename="+filedownloadname); 
    Response.ContentType="................";
    FileStream fs=new FileStream(Server.MapPath("../"+filedownloadname),FileMode.Open);

    byte [] buffer=new byte[1024];
    int n=fs.Read(buffer,0,buffer.Length);
    while(n>0)
    {
    Response.BinaryWrite(buffer);
    n=fs.Read(buffer,0,buffer.Length);
    }
    fs.Close();
    Response.End();
      

  12.   

    谢谢大家的回复to LoveCherry:1。下载的文件是别人网站上的文件,不能用FileStream读取.
       我用下面的代码: Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment; filename=" + url); 
    Response.ContentType="application/x-msdownload";
    FileStream fs=new FileStream( url ,FileMode.Open); 就会报错:不支持 URI 格式2. 在java中,用下面的语句来实现这个功能: DownFile(string filename)

    string url=FindNodeInXml(filename)  HttpClient.DownFile(url);  }  我在.net中没有找到HttpClient.DownFile对应的方法,
    用WebClient.DownloadFile( string url , string filename )
    有三个问题:
    (1).  必须指定第二个参数
    (2).  运行过程中不能弹出下载对话框
    (3).  下载的所有文件都是5k,显然不是要下载的文件,而且不能运行 那么这段java代码到底对应怎么样的c#代码那?
    请高手指教,谢谢
      

  13.   

    WebRequest myWebRequest=WebRequest.Create(url);// Assign the response object of 'WebRequest' to a 'WebResponse' variable.
    WebResponse myWebResponse=myWebRequest.GetResponse();
    System.IO.Stream stream = myWebResponse.GetResponseStream();
    stream.Read( bytes , 0 , (int)stream.Length );  <--执行到这句出错==>myWebResponse.ContentLengthreturn bytes;
      

  14.   

    用了sugarsupper(北欧神话) 的方法,现在可以下载了,非常感谢。但是现在的问题是,我下载http://gdfs.driversky.com/down/laozhong.exe这个文件,可是用Response.BinaryWrite,写在页面上面的却是www.skycn.com的主页。而如果我直接在地址栏中输入http://gdfs.driversky.com/down/laozhong.exe,就先弹出Flashget下载,然后再转到wwww.skycn.com的主页,到底采用了什么技术?我怎么读不到exe文件,却只读到一个www.skycn.com的html文件那?
      

  15.   

    url重写最好
    也不会象二进制流一样占内存重写地址你想怎么样就怎么样,给一个相对路径就是了
    别人网站拿去也没用