当前位置:编程学习 > C#/ASP.NET >>

asp.net 文件下载功能,如果电脑上装有迅雷,会下载页面的源码 (急)

目前代码如下:

string path = System.Web.HttpContext.Current.Request.PhysicalApplicationPath+"uploadFile/部门文件夹/"+dept+"/"+XFileName;

//初始化 FileInfo 类的实例,它作为文件路径的包装
FileInfo fi = new FileInfo(path);

//判断文件是否存在
if (fi.Exists)
{
//将文件保存到本机上
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment;filename="+System.Web.HttpUtility.UrlEncode(filename,System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", fi.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Filter.Close();
Response.WriteFile(fi.FullName);
Response.End();
}



在网上找过很多种方法 都不行~  恳请高手指点~~~  谢谢啦~~ 急~  --------------------编程问答-------------------- 我也碰到过类似的问题,看了这个后解决了参考 --------------------编程问答-------------------- 我都是在同一张页面左处理的 如果重定向本页面的话就会报错了。。~ --------------------编程问答--------------------
引用 1 楼 tianshikuqi8 的回复:
我也碰到过类似的问题,看了这个后解决了参考


好东西。。。 --------------------编程问答-------------------- 还没解决~~ 各位大虾~~ 帮帮忙~ --------------------编程问答-------------------- 这个问题问了不下一百遍。。。
--------------------编程问答-------------------- 网上以前有个解决方案:

你可以试一下

string RECORDFILE;
        string http;
        RECORDFILE = Request["RECORDFILE"].Replace("|", "");
        http = "/down/";
        FileInfo DownloadFile = new FileInfo(http+RECORDFILE); //设置要下载的文件
        Response.Clear(); //清除缓冲区流中的所有内容输出
        Response.ClearHeaders(); //清除缓冲区流中的所有头
        Response.Buffer = false; //设置缓冲输出为false
        //设置输出流的 HTTP MIME 类型为application/octet-stream
        Response.ContentType = "application/octet-stream";//将 HTTP 头添加到输出流
        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
        //Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());//将指定的文件直接写入 HTTP 内容输出流。
        //Response.WriteFile(DownloadFile.FullName);
        Response.WriteFile(http + RECORDFILE);
        Response.Flush(); //向客户端发送当前所有缓冲的输出
        Response.End(); //将当前所有缓冲的输出发送到客户端 
--------------------编程问答-------------------- 添加Download.aspx页。

FileStream f= new FileStream("", FileMode.Open);  
byte[] buffer = new byte[f.Length];  
f.Read(buffer, 0, buffer.Length);  
f.Close();  
Response.ContentType = "application/octet-stream";  
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("", System.Text.Encoding.UTF8));  
Response.BinaryWrite(buffer);  
Response.Flush();  
Response.End();  

--------------------编程问答-------------------- 顶一下人气!!! --------------------编程问答-------------------- 帮顶! --------------------编程问答-------------------- 帮顶! --------------------编程问答--------------------

    private void Filedown()
    {
        string url = Server.MapPath("drop.htm");
        FileStream f = new FileStream(url, FileMode.Open);
        byte[] buffer = new byte[f.Length];
        f.Read(buffer, 0, buffer.Length);
        f.Close();
        Response.ContentType = "application/octet-stream";
        Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(url, System.Text.Encoding.UTF8));
        Response.BinaryWrite(buffer);
        Response.Flush();
        Response.End();   
    }

试试这个。 --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 参考学习。 --------------------编程问答-------------------- 新建一个download.aspx?filename='aa'页面专门用来下载,并将要下载的文件名传给这个页面,然后在这个页面写以下代码
string filename=Request.QueryString(["filename"]);
FileInfo DownloadFile = new FileInfo("../FILE/"+filename); //设置要下载的文件
if(DownloadFile.isExists)
{
 Response.Clear(); //清除缓冲区流中的所有内容输出
 Response.ClearHeaders(); //清除缓冲区流中的所有头
 Response.Buffer = false; //设置缓冲输出为false
 Response.ContentType = "application/octet-stream";//将 HTTP 头添加到输出流
 Response.AppendHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
 Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
 Response.WriteFile(DownloadFile.FullName);
 Response.Flush(); //向客户端发送当前所有缓冲的输出
 Response.End(); //将当前所有缓冲的输出发送到客户端 
 Response.Close();
}
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,