当前位置:编程学习 > C#/ASP.NET >>

关于response,下载文件

将一个文件上传到数据库,在下载页面.cs文件中写:
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode((string)reader["name"], System.Text.Encoding.UTF8));
Response.ContentType = (string)reader["mime"];
Response.OutputStream.Write((byte[])reader["data"], 0, (int)reader["size"]);

         Response.Flush();

         Response.End();
如果下载的是文本形式的文件,打开后在文件后有
System.Threading.ThreadAbortException: 正在中止线程。
   在 System.Threading.Thread.AbortInternal()
   在 System.Threading.Thread.Abort(Object stateInfo)
   在 System.Web.HttpResponse.End()
   在 dn2.Page_Load(Object sender, EventArgs e) 位置 e:\Inetpub\wwwroot\1\dn2.aspx.cs:行号 63
如去掉Response.End();
文件后就出现此页面的HTML代码
怎么回事? --------------------编程问答-------------------- 为什么不直接Response.WriteFile呢?
产生的原因像是还没下载完你的Response.End();就给结束掉了因此出问题.你的文本形式的文件内容不会是代码什么吧? 
试试把Response.Flush();去掉留下Response.End();看看症状 --------------------编程问答-------------------- 如去掉Response.End();
文件后就出现此页面的HTML代码 --------------------编程问答-------------------- 把Response.Flush();去掉留下Response.End();看看症状
System.Threading.ThreadAbortException: 正在中止线程。
   在 System.Threading.Thread.AbortInternal()
   在 System.Threading.Thread.Abort(Object stateInfo)
   在 System.Web.HttpResponse.End()
   在 dn2.Page_Load(Object sender, EventArgs e) 位置 e:\Inetpub\wwwroot\1\dn2.aspx.cs:行号 63
--------------------编程问答-------------------- 没遇到过.帮你顶.

Response.WriteFile用这个吧. --------------------编程问答-------------------- 把Response.Flush();去掉.
留下Response.End();
看看结果 --------------------编程问答-------------------- 先得这样看看

System.Threading.ThreadAbortException: 正在中止线程。
   在 System.Threading.Thread.AbortInternal()
   在 System.Threading.Thread.Abort(Object stateInfo)
   在 System.Web.HttpResponse.End()
   在 dn2.Page_Load(Object sender, EventArgs e) 位置 e:\Inetpub\wwwroot\1\dn2.aspx.cs:行号 63
--------------------编程问答-------------------- 帮LZ顶 --------------------编程问答-------------------- Response.WriteFile
怎么用? --------------------编程问答-------------------- 还是文本的问题
我用Response.WriteFile
我在目录中建1.txt
写个“颠三倒四但是”
点击下载,选择“打开”
打开后发现:
颠三倒四但是<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
无标题页
</title></head>
<body>
    <form name="form1" method="post" action="dn2.aspx?id=7" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGQUXe5j+vn09IoesWG/Rq/4+7OOTA==" />
</div>

    <div>
    
    </div>
    </form>
</body>
</html>




怎么办?

疯了 --------------------编程问答-------------------- Response.End是必须的. --------------------编程问答-------------------- 路过 --------------------编程问答-------------------- 强烈要求
解决下载文本格式文件的问题 --------------------编程问答-------------------- 帮LZ顶 --------------------编程问答-------------------- 谢 --------------------编程问答-------------------- 我也遇到这个问题,楼主找到解决方法了吗? --------------------编程问答-------------------- 最好在Response.End之前把数据库connection,reader都close或者dispose掉 --------------------编程问答-------------------- 其他错误引起的吧! --------------------编程问答-------------------- 友情UP~ --------------------编程问答-------------------- 遇到同样的问题,楼主给个办法吧!!!
引用楼主 yxd1984gz 的帖子:
将一个文件上传到数据库,在下载页面.cs文件中写: 
Response.AppendHeader( "Content-Disposition ",   "attachment;filename= "   +   HttpUtility.UrlEncode((string)reader[ "name "],   System.Text.Encoding.UTF8)); 
Response.ContentType   =   (string)reader[ "mime "]; 
Response.OutputStream.Write((byte[])reader[ "data "],   0,   (int)reader[ "size "]); 

                  Response.Flush(); 

    …
--------------------编程问答-------------------- 把Response.End()换成HttpContext.Current.ApplicationInstance.CompleteRequest();试一试。 --------------------编程问答-------------------- 供参考的代码:
 
System.IO.FileStream fs = System.IO.File.OpenRead(exportFile);
            byte[] FileData = new byte[fs.Length];
            fs.Read(FileData, 0, (int)fs.Length);
            Response.Clear();
            Response.AddHeader("Content-Type", "application/octet-stream");
            string FileName = System.Web.HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(exportFileName));
            Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Convert.ToChar(34) + FileName
                + System.Convert.ToChar(34));
            Response.AddHeader("Content-Length", fs.Length.ToString());
            Response.BinaryWrite(FileData);
            fs.Close();
          Response.Flush();
            HttpContext.Current.ApplicationInstance.CompleteRequest();

补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,