MVC后台Controller向客户端浏览器发送文件

问题描述

数据是我从数据库获取得到datatable,并转换为html的table代码想将这些html数据以excel方式发送给前台,让用户下载我用的是FileResult返回的,前台可以alert出这些html代码,但是无法下载xls文件,这是怎么回事呢?后台代码publicFileResultExcelExport(){stringcontent=GetExcelContent();byte[]fileContents=Encoding.UTF8.GetBytes(content);returnFile(fileContents,"application/ms-excel","data.xls");}

前台代码$("#btnExport").click(function(){$.post("ReportTB/ExcelExport",null,function(data,status){//alert(data);});});

解决方案

本帖最后由 yaotomo 于 2016-03-24 10:02:03 编辑
解决方案二:
要下载excel文件,你先要有excel文件,所以你要先生成excel文件。或者是你有excel文件,就打开excel文件把内容保存到excel文件,然后提供下载
解决方案三:
引用1楼yi_iy的回复:

要下载excel文件,你先要有excel文件,所以你要先生成excel文件。或者是你有excel文件,就打开excel文件把内容保存到excel文件,然后提供下载

在http://www.cnblogs.com/ldp615/archive/2010/09/17/asp-net-mvc-file-result.html看到的一段介绍,用这种形式不能直接返回excel吗?FileContentResult可以直接将byte[]以文件形式发送至浏览器(而不用创建临时文件)。参考代码如下:publicActionResultFileContentDownload1(){byte[]data=Encoding.UTF8.GetBytes("欢迎访问鹤冲天的博客http://www.cnblogs.com/ldp615/");returnFile(data,"text/plain","welcome.txt");}
解决方案四:
网上找的MVC导出excel的几种方式,我用的应该是第二种。我就是拼接好一段html代码,再设置输出格式为application/ms-excel的。但是前台不会弹出文件下载的提示框。MVC导出数据到EXCEL新方法:将视图或分部视图转换为HTML后再直接返回FileResult导出EXCEL方法总结MVC导出数据到EXCEL的方法有很多种,常见的是:1.采用EXCELCOM组件来动态生成XLS文件并保存到服务器上,然后转到该文件存放路径即可;优点:可设置丰富的EXCEL格式,缺点:需要依赖EXCEL组件,且EXCEL进程在服务器中无法及时关闭,以及服务器上会存留大量的不必要的XLS文件;2.设置输出头为:application/ms-excel,再输出拼接的HTMLTABLE数据;优点:无需组件,可设置一些简单的格式,缺点:拼接HTMLTABLE过程较复杂,不够直观;3.借助第三方组件(如:NPOI)优点及缺点均依赖于第三方组件的易用性上面,在此不作说明;大家也可以看我之前发表的一篇博文:我写的一个ExcelHelper通用类,可用于读取或生成数据实现在MVC下新的导出EXCEL方法
解决方案五:
那就是浏览器安全级别的。你去把浏览器的安全级别调低,把ActiveX都打开,再试试。JS导excle要设置ActiveX的好像
解决方案六:
用windows.open那个链接就行了
解决方案七:
如果你非要post的话建个表单表单指向这个路径target设到一个隐藏域然后提交这个表单
解决方案八:
知道原因了。因为我使用的是ajax提交,如果使用form提交,就可以返回excel下载弹出框如果我想使用ajax方式向后退发出请求,就没办法返回excel下载吗?
解决方案九:
ajax只能处理文本信息,不能处理二进制信息
解决方案十:
参考现成的:
解决方案十一:
网上搜索了一下,貌似ajax方式是无法从后台导出excel,供前台下载的。看来只能用表单提交方式了。平时做开发习惯使用ajax,都不用传统表单了,看来太过依赖ajax也不好啊。
解决方案十二:
Response.AddHeader("Content-Disposition","attactment;filename="+文件名);Response.ContentType="application/octet-stream;charset=gbk";Response.BinaryWrite(文件的byte[]);Response.End();

解决方案十三:
引用11楼BitCoffee的回复:

Response.AddHeader("Content-Disposition","attactment;filename="+文件名);Response.ContentType="application/octet-stream;charset=gbk";Response.BinaryWrite(文件的byte[]);Response.End();

代码没有问题,但是ajax的请求是无法返回excel给前台的。
解决方案十四:
$("#btnExport").click(function(){location.href='@Url.Action("ExcelExport","ReportTB")';});

时间: 2024-09-20 01:01:02

MVC后台Controller向客户端浏览器发送文件的相关文章

ASP.NET MVC 通过 FileResult 向浏览器发送文件

在 Controller 中我们可以使用 FileResult 向客户端发送文件. FileResult FileResult 是一个抽象类,继承自 ActionResult.在 System.Web.Mvc.dll 中,它有如上三个子类,分别以不同的方式向客户端发送文件. 在实际使用中我们通常不需要直接实例化一个 FileResult 的子类,因为 Controller 类已经提供了六个 File 方法来简化我们的操作: protected internal FilePathResult Fi

ASP.NET MVC如何向浏览器发送文件以提供文件下载功能

文件下载一般都是需要一个文件选择对话框来选择存放文件的地方.我们可以自己做一个, 但简单的方面就是利用浏览器的现成功能. 所有的浏览器都包括文件下载功能,但文件选择对话框却 不是每个浏览器都有提供.这里我只选择我常用的两个浏览器:谷歌浏览器和搜狗浏览器. 先来一个 小例子: public ActionResult Index() { var path = Server.MapPath("~/frog.jpg.jpg"); return File(path, "iamge/jp

asp.net 客户端浏览器缓存的Http头介绍_实用技巧

让浏览器做缓存需要给浏览器发送指定的Http头,告诉浏览器缓存多长时间,或者坚决不要缓存.作为.net的程序员,其实我们一直都在用这种方法,在OutputCache指令中指定缓存的Location为Client时,其实就是给浏览器发送了一个Http头,告诉浏览器这个Url要缓存多长时间,最后修改的时间. 微软在OutputCacheModule中对这些缓存用到的Http头给我们进行了很好的封装,但是了解这些Http头可以更灵活的使用它们. 和客户端缓存相关的Http头有以下几个,分别是: 1.

框架-ssh后台怎么接受安卓和ios端发送文件怎么接受,

问题描述 ssh后台怎么接受安卓和ios端发送文件怎么接受, 我后台用的ssh框架,在安卓和ios上传文件的时候老接受不到文件,求方法, 解决方案 前端发送multipart格式的数据,你在后台接收一下这个,并转化一下,springMVC中用multipart接收,strtus2中你就在对应的action中写private File myFile;//提交文件名称,然后set/get,这样你就得到file类型的文件了,在写到服务器中 解决方案二: 有例子么?你这种我也试了的 解决方案三: str

文件下载-asp.net mvc+jquery 如何将服务器的excel文件导出到客户端下载?

问题描述 asp.net mvc+jquery 如何将服务器的excel文件导出到客户端下载? 问题描述 希望实现的功能是页面点击"导出"button,服务器端即将页面上显示的数据制成excel(已完成该功能)临时存放在服务器,然后将文件下载到客户端. 现在是在服务器生成excel文件后,不知道怎么样将文件传递给客户端. "导出"button的js和controller的action请问该如何实现? 即asp.net mvc+jquery如何实现文件下载 本人新手,

mina-android 通过Mina客户端向客户端发送文件如何实现

问题描述 android 通过Mina客户端向客户端发送文件如何实现 这是服务器端的代码,现在可传递Object NioSocketAcceptor acceptor = new NioSocketAcceptor(); DefaultIoFilterChainBuilder filterBuilder = acceptor.getFilterChain(); ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSeria

windows server2012 + iis8.5 为什么不能把详细错误发送到客户端浏览器

问题描述 windowsserver2012+iis8.5已经完成下列设置:asp调试属性"将错误发送到浏览器"设置为True:web.config设置customErrors="Off":.Net错误页模式打开为什么,不能把详细错误发送到客户端浏览器?客户端浏览器总是显示为InternalServerError 解决方案 本帖最后由 h88606065 于 2014-10-23 18:25:58 编辑解决方案二:自己顶一下,刚开始用新版本,请帮忙.解决方案三:一直

编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中。

问题描述 2.编写Socket客户端和服务器程序,客户端读取本地文件的数据,发送到服务器,服务器接收并存储到文件中.消息格式:字段长度(单位字节)内容--------------------------------------------------------------------len8整个消息长度,不包括这4个字节,类型为longfile_name_length1文件名长度,bytefile_namefile_name_length文件名,Stringdata_length8文件数据长度

MVC中基于Ajax和HTML5实现文件上传功能_AJAX相关

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法--File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的"读