Response.Clear();
// 添加待下载文件的头信息
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(MusicPathTemp,System.Text.Encoding.UTF8));
// 指定待下载信息为流信息不由客户端读取而直接下载
Response.ContentType = "application/octet-stream";
// 向客户端发送流信息
Response.WriteFile(MusicPathTemp);
// 页面工作结束
Response.End();MusicPathTemp为文件路径,如“http://202.197.77.128/qgzxol/music/许巍/每一刻都是崭新的/喝茶去.mp3”会出现如下问题:路径为虚拟路径,如何解决?由于Web服务器和文件下载服务器分离的,怎么办?

解决方案 »

  1.   

    根本不用这种方式,吃力不讨好。你直接一个<a href=>链到下载地址就行了。如何要验证,你完全可以利用iis或Application_BeginRequest
      

  2.   

    两种方法:(1)把http路径改成局域网路径;
    (2)如果你的文件下载服务器不在局域网内或没有实现VPN,可以在你的文件下载服务器上架一个Web站点用于下载文件,这样你的外部Web在遇到下载请求时先到文件下载服务器上的Web站点下载文件,然后在传给客户端。我曾经有个类似问题,不过这样做会存在效率问题^_^
      

  3.   

    合理利用Request里面那些什么Path、PhysicalPath、ApplicationPath、PhsicalApplicationPath吧,总能够获取路径的。再不行的话就用Server.MapPath咯。
      

  4.   

    我认为在 WEB 服务器作一个网络驱动器就行了比如: 将 WEB 服务器的 Z: 盘映射到文件服务器的某个文件夹就行了
      

  5.   

    cityhunter172(寒羽枫),方案可行,只是不是很安全,
    cat_hsfz() ,方案不可行,因为不在同一个web服务器上,还有什么更好的方案吗,求助!
      

  6.   

    Response.Clear();
    strFileName =HttpUtility.UrlEncode(reader["Name"].ToString(),System.Text.Encoding.UTF8);
    strFilePath=System.Web.HttpContext.Current.Request.MapPath("UpFiles/")+Request.QueryString["ID"].ToString()+"."+reader["Type"].ToString();
    Response.AppendHeader("Content-Disposition","attachment;filename="+strFileName); 
    Response.WriteFile(strFilePath);
    Response.End();