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

Asp.net直接保存文件到客户端,第1张

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

   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 attachmentfilename= +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 attachmentfilename= + 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 attachmentfilename= + saveFileName)   Response ContentType=filecontenttype      Response WriteFile(filename)   Response Flush()   Response Close()      Response End()   }   最后得出结论:要实现柚子Nan提出的能否不考虑文件的类型 直接把文件显示到浏览器(Response) 有一种方法 让客户端都不要隐藏已知的扩展名 但是这种方法是无法适应大部分电脑使用者的(一般只有比较熟悉电脑的人才会这样做吧?)

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

lishixinzhi/Article/program/net/201311/11936

ASP.NET MVC提供了一种简单的方法来读取和保存JSON数据。它使用JSON.NET库来处理JSON数据,并且提供了一些内置的方法来处理JSON数据。

要读取JSON数据,可以使用JsonConvert.DeserializeObject方法,它接受一个JSON字符串作为参数,并将其转换为.NET对象。例如,如果要读取一个JSON对象,可以使用以下代码:

var jsonString = "{\"Name\":\"John Doe\",\"Age\":30}"

var person = JsonConvert.DeserializeObject<Person>(jsonString)

要保存JSON数据,可以使用JsonConvert.SerializeObject方法,它接受一个.NET对象作为参数,并将其转换为JSON字符串。例如,如果要保存一个Person对象,可以使用以下代码:

var person = new Person { Name = "John Doe", Age = 30 }

var jsonString = JsonConvert.SerializeObject(person)

使用这些方法,可以轻松地读取和保存JSON数据。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11429053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存