Asp.net直接保存文件到客户端

28 篇文章 0 订阅
14 篇文章 0 订阅

在我们的系统的编写过程中,应该有很多的时候需要客户下载文件.我第一次的做法(应该也是大部分人的做法吧?)是:

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)
{
    
string saveFileName = "test.xls";
    
int intStart = filename.LastIndexOf("")+1;
    saveFileName = filename.Substring(intStart,filename.Length-intStart);
    FileStream MyFileStream; 
    
long FileSize; 

    MyFileStream 
= new FileStream(filename,FileMode.Open); 
    FileSize 
= MyFileStream.Length; 

    
byte[] Buffer = new byte[(int)FileSize]; 
    MyFileStream.Read(Buffer, 
0, (int)FileSize); 
    MyFileStream.Close(); 

    Response.AddHeader(
"Content-Disposition""attachment;filename="+saveFileName);
    Response.ContentEncoding 
= System.Text.Encoding.GetEncoding("GB2312");
    Response.ContentType 
= "application/vnd.ms-excel"

    Response.BinaryWrite(Buffer); 
    Response.Flush(); 
    Response.Close(); 
    Response.End();
}
但是有个严重的问题,就是文件格式。这样只是将流输出,且无法正确识别格式。还好,能人层出不穷,  柚子Nan 提出了能否不考虑文件的类型,直接把文件显示到浏览器(Response) 的想法正好切中我的要害所在,于是急忙研究了柚子Nan的想法,修改出最后代码:
/// <summary>
/// 下载文件
/// </summary>
/// <param name="filename">文件物理地址</param>

protected   void  DownloadFile( string  filename)
{
    
string saveFileName = "test.xls";
    
int intStart = filename.LastIndexOf("")+1;
    saveFileName = filename.Substring(intStart,filename.Length-intStart);

    Response.Clear();
    Response.Charset 
= "utf-8";
    Response.Buffer
= true;
    
this.EnableViewState = false;
    Response.ContentEncoding 
= System.Text.Encoding.UTF8;

    Response.AppendHeader(
"Content-Disposition","attachment;filename=" + saveFileName); 
    Response.WriteFile(filename); 
    Response.Flush();
    Response.Close();

    Response.End();
}

文件的ContentType类型 小全

 

...
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值