问题描述
文件下载时报错:System.Threading.ThreadAbortException: 正在中止线程。
指示错误发生在“response.End();
”这一行
/// <summary>
/// 将文件发送回浏览器端,直接下载本地
/// </summary>
/// <returns></returns>
public static void SendFile(string fileName, MemoryStream ms, System.Text.Encoding encoding = null)
{
try
{
fileName = (fileName + "").Replace(" ", "");
encoding = encoding ?? System.Text.Encoding.UTF8;
if (ms != null && !string.IsNullOrEmpty(fileName))
{
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.Clear();
response.Charset = encoding.BodyName;// "utf-8";
if (!HttpContext.Current.Request.UserAgent.Contains("Firefox") && !HttpContext.Current.Request.UserAgent.Contains("Chrome"))
{
fileName = HttpUtility.UrlEncode(fileName, encoding);
}
response.ContentType = "application/octet-stream";//发送为二进制文件
response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
response.BinaryWrite(ms.ToArray());
ms.Close();
ms = null;
response.Flush();
response.End();
}
}
catch (Exception ex)
{
}
}
原因分析:
Response.End用法问题
解决方案:
/// <summary>
/// 将文件发送回浏览器端,直接下载本地
/// </summary>
/// <returns></returns>
public static void SendFile(string fileName, MemoryStream ms, System.Text.Encoding encoding = null)
{
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
try
{
fileName = (fileName + "").Replace(" ", "");
encoding = encoding ?? System.Text.Encoding.UTF8;
if (ms != null && !string.IsNullOrEmpty(fileName))
{
response.Clear();
response.Charset = encoding.BodyName;// "utf-8";
if (!HttpContext.Current.Request.UserAgent.Contains("Firefox") && !HttpContext.Current.Request.UserAgent.Contains("Chrome"))
{
fileName = HttpUtility.UrlEncode(fileName, encoding);
}
response.ContentType = "application/octet-stream";//发送为二进制文件
response.AddHeader("Content-Disposition", "attachment;filename=" + fileName);
response.BinaryWrite(ms.ToArray());
ms.Close();
ms = null;
response.Flush();
return;
}
}
catch (Exception ex)
{
}
finally
{
response.End();
}
}
把response.End();去掉改成return; 在catch后面增加
finally
{
response.End();
}