C#中关于下载文件的Response问题

2025-04-25 20:34:17
推荐回答(2个)
回答1:

1、我先解释你不懂的代码吧

Response.AddHeader("Content-Disposition", "attachment; filename=" +

//这一句是添加报文头,在客户端出现,打开,另存为,取消的对话框
HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
//防止文件名含有中文,而进行编码,这样中文就不会显示乱码了
Response.BinaryWrite(bytes);
//向客户端写数据
Response.Flush();
//表示向客户端一点一点的写数据,流动的方式,而不会使得数据堆在内存中,造成客户端假死的现象
//Response.End();
结束

2、至于你说的其中response一直说上下文中没有

你试下把fs.Close()放到Response.Flush()后面或者Response.BinaryWrite(bytes)后面

回答2:

  /// 
        /// 文件下载
        /// 

        /// 
        /// 文件ID
        /// 文件二进制流
        public void ProcessRequest(HttpContext context)
        {
            string sid = context.Request.QueryString["sid"];
            int fileID = Convert.ToInt32(context.Request.QueryString["fileID"]);
            string fileName = context.Request.QueryString["fileName"];
            int resultCode = 0;
             //以字符流的形式下载文件
            byte[] bytes = 文件二进制流;
            context.Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            context.Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            context.Response.BinaryWrite(bytes);
            context.Response.Flush();
            context.Response.End();
        } 
        我这个是一般处理程序来控制文件下载
        你的问题应该是没有实例化Response