在我们的系统的编写过程中,应该有很多的时候需要客户下载文件.我第一次的做法(应该也是大部分人的做法吧?)是:
HttpResponse response
=
HttpContext.Current.Response;
string
js
=
"
<script language=javascript>window.open('{0}');</script>
"
;
js
=
string
.Format(js, url);
response.Write(js);
但是有个问题了,就是会被广告拦截软件直接拦截掉,另我非常的头痛,于是寻找更好的解决方法.看了用Response.BinaryWrite写文件流一文之后觉得确实可以如此,修改代码如下:
/**/
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filename">文件物理地址</param>
protected
void
DownloadFile(
string
filename)
![](https://image.cha138.com/20210516/d5873cdab1d9405292d3d17614179ec6.jpg)
...
{
string saveFileName = "test.xls";
int intStart = filename.LastIndexOf("")+1;
saveFileName = filename.Substring(intStart,filename.Length-intStart);
FileStream MyFileStream;
long FileSize;
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
MyFileStream = new FileStream(filename,FileMode.Open);
FileSize = MyFileStream.Length;
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
byte[] Buffer = new byte[(int)FileSize];
MyFileStream.Read(Buffer, 0, (int)FileSize);
MyFileStream.Close();
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
Response.AddHeader("Content-Disposition", "attachment;filename="+saveFileName);
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.ContentType = "application/vnd.ms-excel";
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
Response.BinaryWrite(Buffer);
Response.Flush();
Response.Close();
Response.End();
}
但是有个严重的问题,就是文件格式。这样只是将流输出,且无法正确识别格式。还好,能人层出不穷, 柚子Nan 提出了能否不考虑文件的类型,直接把文件显示到浏览器(Response) 的想法正好切中我的要害所在,于是急忙研究了柚子Nan的想法,修改出最后代码:
/**/
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filename">文件物理地址</param>
protected
void
DownloadFile(
string
filename)
![](https://image.cha138.com/20210516/d5873cdab1d9405292d3d17614179ec6.jpg)
...
{
string saveFileName = "test.xls";
int intStart = filename.LastIndexOf("")+1;
saveFileName = filename.Substring(intStart,filename.Length-intStart);
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
Response.Clear();
Response.Charset = "utf-8";
Response.Buffer= true;
this.EnableViewState = false;
Response.ContentEncoding = System.Text.Encoding.UTF8;
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName);
Response.WriteFile(filename);
Response.Flush();
Response.Close();
![](https://image.cha138.com/20210516/ba822abc33d74213a8f4d253d18b903b.jpg)
Response.End();
}
文件的ContentType类型 小全