请问如何用ASP.Net实现文件的下载? 文件流,搜索一下就有,每天都有人在问 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 文件下载一. 服务端通过Response输出相应的HTTP Response Headers信息,和要下载的文件的数据来把文件发送到客户端,HTTP Response Headers表现在html文件中是下面的形式:<meta http-equiv="Content-Type" content="text/htm ">http-equiv表示是Headers的名称,content表示这个Headers的值二. 首先,要输出文件的MIME类型:Page.Response.AddHeader( "Content-Type", “MIME类型” ); 三. 其次,要输出下载的文件的打开位置和文件名:Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName );content-disposition 的 HTTP response header 允许指定文档表示的信息。使用这种 header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。打开位置:attachment ―― 表示作为附件发送到客户端,客户端将单独打开此文件。inline ―― 表示将在浏览器中打开这个文件。文件名:filename ―― 表示发送到客户端文件的文件名。四. 准备发送到客户端的文件数据:1. 先将不同类型来源的数据转成byte类型的数组,再通过Response.BinaryWrite方法发送到客户端:1.1. 读取文件来获得byte数组: string FileName; //生成或获取要发送到客户端的文件名string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下if(File.Exists(filePath) == false){ //服务器上没有这个文件 return;}FileStream myFile = File.OpenRead(filePath); //读取文件进入FileStreambyte[] fileCont = new byte[myFile.Length];myFile.Read(fileCont,0,(int)myFile.Length); //将文件流中的内容转成byte数组 1.2. 在数据库的二进制字段中读取: //从url获取图片的idstring ImageId = Request.QueryString["img"];//构建查询语句string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId;SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() );SqlCommand command = new SqlCommand( sqlText, connection);connection.Open();SqlDataReader dr = command.ExecuteReader();if ( dr.Read()){ byte[] fileCont = (byte[]) dr["img_data"] ;}connection.Close(); 1.3. 从internet上读取文件: HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create( "http://www.via.com/aa.xls ");HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();Stream readStream = myWebResponse.GetResponseStream(); byte[] bytes = new byte[readStream.Length];bytes = readStream.Read(bytes,0,readStream.Length); 通过上述三种方法获得的文件内容的byte数组就可以用来输出了:Page.Response.BinaryWrite(fileCont);Page.Response.End(); 2. 直接读取文件输出: string FileName; //生成或获取要发送到客户端的文件名string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下if(File.Exists(filePath) == false){ //服务器上没有这个文件 return;}Page.Response.Clear();Page.Response.AddHeader( "Content-Type", "image/gif" ); //根据MIME的不同设置Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath);Page.Response.WriteFile(filePath);Page.Response.End(); 怎么实现网易新浪这种数据显示? 为什么一点击按钮浏览器就死了“没有响应” 请问怎样才能实现GridView 加载数据之前,改写模板列中控件的值? Web.config设置问题 打开乱码问题? .net为什么不能跨平台? IIS 中默认网站(停止) ,点击启动时出错:发生意外错误 Ox8ff2740。 dropDownList触发两次,肯请解决 关于this,兄弟姐妹们,出手了! 如何根据一个网页对话框的返回值,改变WebForm上某一控件的值或属性 有关数据类型的问题,请大家指教 湖南的朋友:我过年回家还没有买到票,有谁合伙租了车的吗?我想搭一脚.
<meta http-equiv="Content-Type" content="text/htm ">
http-equiv表示是Headers的名称,content表示这个Headers的值二. 首先,要输出文件的MIME类型:
Page.Response.AddHeader( "Content-Type", “MIME类型” ); 三. 其次,要输出下载的文件的打开位置和文件名:
Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName );
content-disposition 的 HTTP response header 允许指定文档表示的信息。使用这种 header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。
打开位置:
attachment ―― 表示作为附件发送到客户端,客户端将单独打开此文件。
inline ―― 表示将在浏览器中打开这个文件。
文件名:
filename ―― 表示发送到客户端文件的文件名。四. 准备发送到客户端的文件数据:1. 先将不同类型来源的数据转成byte类型的数组,再通过Response.BinaryWrite方法发送到客户端:1.1. 读取文件来获得byte数组: string FileName; //生成或获取要发送到客户端的文件名string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下if(File.Exists(filePath) == false){ //服务器上没有这个文件 return;}FileStream myFile = File.OpenRead(filePath); //读取文件进入FileStreambyte[] fileCont = new byte[myFile.Length];myFile.Read(fileCont,0,(int)myFile.Length); //将文件流中的内容转成byte数组
1.2. 在数据库的二进制字段中读取: //从url获取图片的idstring ImageId = Request.QueryString["img"];//构建查询语句string sqlText = "SELECT img_data, img_contenttype FROM Image WHERE img_pk = " + ImageId;SqlConnection connection = new SqlConnection( ConfigurationSettings.AppSettings["DSN"].ToString() );SqlCommand command = new SqlCommand( sqlText, connection);connection.Open();SqlDataReader dr = command.ExecuteReader();if ( dr.Read()){ byte[] fileCont = (byte[]) dr["img_data"] ;}connection.Close();
1.3. 从internet上读取文件: HttpWebRequest myWebRequest = (HttpWebRequest)WebRequest.Create( "http://www.via.com/aa.xls ");HttpWebResponse myWebResponse = (HttpWebResponse)myWebRequest.GetResponse();Stream readStream = myWebResponse.GetResponseStream(); byte[] bytes = new byte[readStream.Length];bytes = readStream.Read(bytes,0,readStream.Length);
通过上述三种方法获得的文件内容的byte数组就可以用来输出了:
Page.Response.BinaryWrite(fileCont);Page.Response.End(); 2. 直接读取文件输出: string FileName; //生成或获取要发送到客户端的文件名string filePath = Server.MapPath("./") + FileName; //假设文件在当前目录下if(File.Exists(filePath) == false){ //服务器上没有这个文件 return;}Page.Response.Clear();Page.Response.AddHeader( "Content-Type", "image/gif" ); //根据MIME的不同设置Page.Response.AddHeader("Content-Disposition", "inline;filename=" + filePath);Page.Response.WriteFile(filePath);Page.Response.End();