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()下面的我都不明白了。。。。 展开
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()下面的我都不明白了。。。。 展开
2个回答
展开全部
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)后面
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))
{
//这里面进行操作吧
}
展开全部
/// <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的所属的指令集报错。头文件那
追答
添加引用了吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询