知识大全 Asp.net直接保存文件到客户端

Posted 文件

篇首语:千金一刻莫空度,老大无成空自伤。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Asp.net直接保存文件到客户端相关的知识,希望对你有一定的参考价值。

Asp.net直接保存文件到客户端  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

      HttpResponse response = HttpContext Current Response;    string js = <script language=javascript>window open( );</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( \\ )+ ;    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 (int)FileSize);    MyFileStream Close();       Response AddHeader( Content Disposition attachment;filename= +saveFileName);    Response ContentEncoding = System Text Encoding GetEncoding( GB );    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( \\ )+ ;    saveFileName = filename Substring(intStart filename Length intStart);       Response Clear();    Response Charset = utf ;    Response Buffer= true;    this EnableViewState = false;    Response ContentEncoding = System Text Encoding UTF ;       Response AppendHeader( Content Disposition attachment;filename= + saveFileName);    Response WriteFile(filename);    Response Flush();    Response Close();       Response End();   

  使用昨天直接保存文件到客户端 中的方法 经过我的反复测试 各式文档都运行完全正常 于是昨晚修改了现有代码 修改了下载方法 以解决一直困扰自己的窗口拦截问题        早上本来还沾沾自喜 这下再也不用老跟客户解释为什么窗口会没掉了 可惜啊 人算不如天算        早上客户就反映下载的文件全是乱码 立马在本机进行测试 没问题 再同事的机器上试验 同样没问题        那应该是客户端的问题才是 只好让客户NetMeeting演示一下她的操作过程 下载 〉保存 〉打开 这么简单的流程 不会做错吧?        正在郁闷之际 突然脑光一闪 终于发现不一样的地方 立马试验 果然如此!        到底有什么区别呢?请看操作图:   客人操作图   我的操作图   各位应该看出不同之处了吧?还看不出来?   这件事情的罪魁祸首就是:              解决方法:使用lovecherry 的如何从注册表读取文件的ContentType 一文的方法

       修正代码:    /**//// <summary>    /// 下载文件    /// </summary>    /// <param name= filename >文件物理地址</param>    protected void DownloadFile(string filename)          string saveFileName = test xls ;    int intStart = filename LastIndexOf( \\\\ )+ ;    saveFileName = filename Substring(intStart filename Length intStart);       System IO FileInfo fi=new System IO FileInfo(filename);    string fileextname=fi Extension;    string DEFAULT_CONTENT_TYPE = application/unknown ;    RegistryKey regkey fileextkey;    string filecontenttype;    try       regkey=Registry ClassesRoot;    fileextkey=regkey OpenSubKey(fileextname);    filecontenttype=fileextkey GetValue( Content Type DEFAULT_CONTENT_TYPE) ToString();       catch       filecontenttype=DEFAULT_CONTENT_TYPE;             Response Clear();    Response Charset = utf ;    Response Buffer= true;    this EnableViewState = false;    Response ContentEncoding = System Text Encoding UTF ;       Response AppendHeader( Content Disposition attachment;filename= + saveFileName);    Response ContentType=filecontenttype;       Response WriteFile(filename);    Response Flush();    Response Close();       Response End();        最后得出结论:要实现柚子Nan提出的能否不考虑文件的类型 直接把文件显示到浏览器(Response) 有一种方法 让客户端都不要隐藏已知的扩展名 但是这种方法是无法适应大部分电脑使用者的(一般只有比较熟悉电脑的人才会这样做吧?)

  bbs 看中的方法 还没有试用 不知道有没有作用

cha138/Article/program/net/201311/11936

相关参考

知识大全 ASP.NET中上传文件到数据库

ASP.NET中上传文件到数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一介绍  为什么

知识大全 ASP.NET2.0中将文件上传到数据库

ASP.NET2.0中将文件上传到数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此问题经

知识大全 asp.net 学习笔记

  用WSDL命令可以注册webservice    在APSNET中创建WEB服务    以ASMX扩展名保存文件  <%@WebServiceLanguage=c#class=TestWS%

知识大全 ASP.NET状态保存方法

ASP.NET状态保存方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET状态保存分

知识大全 asp.net利用多线程执行长时间的任务,客户端显示出任务的执行进度的示例

  在aspnet中执行一个长时间的操作有的时候需要在在客户端有一个反馈能了解到任务的执行进度大致看了一下有这么几种做法  ()按下按钮的时候给出一个<div>提示正在执行任务执行完毕让这

知识大全 asp.net源程序编译为dll文件并调用过程

  使用csc命令将cs文件编译成dll的过程很多时候我们需要将cs文件单独编译成dll文件 操作如下:打开命令窗口>输入cmd到控制台>cd C:WINDOWSMic

知识大全 详细介绍ASP.NET状态保存方法

详细介绍ASP.NET状态保存方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASPNET状

知识大全 asp.net获得客户端域账号

  TogetthewindowsusernamethroughprogramaticallyCompulsaryweneedtosetthewebserver  OpentheInternetInf

知识大全 asp.net向客户端注册JavaScript脚本

asp.net向客户端注册JavaScript脚本  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 保存美丽记忆 用ASP.NET创建网络相册

保存美丽记忆用ASP.NET创建网络相册  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在现在的