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

这是我的命名空间usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Web;usingS... 这是我的命名空间
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security; //报错
using System.Web.UI;//报错
using System.Web.UI.WebControls;//报错
using System.Web.UI.WebControls.WebParts;//报错
using System.Web.UI.HtmlControls;//报错
using System.IO;
下载代码是:
protected void bt_download_Click(object sender, EventArgs e)
{
string fileName = "aaa.txt";//客户端保存的文件名
string filePath = Server.MapPath("DownLoad/aaa.txt");//路径

//以字符流的形式下载文件
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] bytes = new byte[(int)fs.Length];
fs.Read(bytes, 0, bytes.Length);
fs.Close();
Response.ContentType = "application/octet-stream";
//通知浏览器下载文件而不是打开
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

}
其中response一直说上下文中没有。其实fs.Close()下面的我都不明白了。。。。
展开
 我来答
叫什么呢嫩
2013-12-04 · TA获得超过272个赞
知道小有建树答主
回答量:233
采纳率:0%
帮助的人:264万
展开全部
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)后面
追问
那头文件报错呢?
追答
1、你指的是 using system.web报错吗?这个是需要添加引用的,右击项目→添加引用→.net→system.web 确定,不是这个问题的话,你再继续追问,因为我不知道你所说的头文件是哪段代码

2、你这个代码有bug,FileStream不是.net托管的范围,所以需要释放资源,所以需要用using进行资源释放,当然用fs.close()也是可以的,但是需要用try{}catch{},using简单,用using 吧,代码如下:

using(FileStream fs = new FileStream(filePath, FileMode.Open))
{
//这里面进行操作吧
}
calvin_milu
2013-12-04
知道答主
回答量:29
采纳率:0%
帮助的人:19.6万
展开全部
  /// <summary>
        /// 文件下载
        /// </summary>
        /// <param name="sid"></param>
        /// <param name="fileID">文件ID</param>
        /// <returns>文件二进制流</returns>
        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
追问
HttpContext的所属的指令集报错。头文件那
追答
添加引用了吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式