Response.WriteFile()文件流输出与迅雷冲突的解决办法

本文详细介绍了如何通过修改文件流输出代码来解决在使用IE浏览器下载时,部分用户安装的迅雷软件弹出窗口却无法正常下载的问题。通过将输出方式从文件流更改为字节流,成功避免了迅雷下载窗口的干扰,实现了正常的文件下载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前老版本系统上的文件流输出代码如下:


        string url = PUrl(); //PUrl返回文件URL地址

        string path = Server.MapPath(url);

        System.IO.FileInfo file = new System.IO.FileInfo(path);

        Response.Clear();

        Response.Charset = "GB2312";

        Response.ContentEncoding = System.Text.Encoding.UTF8;

        // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
        string[] st = url.Split('.');

        Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(DateTime.Now.ToString()+"."+st[st.Length-1]));

        // 添加头信息,指定文件大小,让浏览器能够显示下载进度

        Response.AddHeader("Content-Length", file.Length.ToString());

        Response.ContentType = "application/octet-stream";

        // 把文件流发送到客户端

        Response.WriteFile(file.FullName);

        // 停止页面的执行

        Response.End();

出现问题:部分用户安装了迅雷,使用IE浏览器下载时点击后弹出迅雷下载窗口却无法下载。
解决办法:改为字节流输出。


        string url = PUrl();
        string path = Server.MapPath(url);
        System.IO.FileStream file = new System.IO.FileStream(path,System.IO.FileMode.Open);
        byte[] buffer = new byte[file.Length];
        file.Read(buffer,0,buffer.Length);
        file.Close();
        Response.Clear();
        Response.Charset = "GB2312";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
        string[] st = url.Split('.');
        Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(DateTime.Now.ToString()+"."+st[st.Length-1]));
        // 添加头信息,指定文件大小,让浏览器能够显示下载进度
        Response.AddHeader("Content-Length", file.Length.ToString());
        Response.ContentType = "application/octet-stream";
        // 把文件流发送到客户端
        Response.BinaryWrite(buffer);
        // 停止页面的执行
        Response.End();

希望能对您有所帮助^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值