首页 > 编程 > JavaScript > 正文

使用Ajax生成的Excel文件并下载的实例

2019-11-19 18:54:08
字体:
来源:转载
供稿:网友

很久有文章啦,今天分享一如何在ASP.NET MVC里使用Ajax下生成文件的方法,以下只是人心得:

大家都知道,在ASP.NET MVC里,如果通Ajax用后控制器,可以返回一JSON象,但并不能直接返回文件(除非刷新面,那就不是Ajax啦),所以如果想用Ajax生成文件并下的,那只要生成的文件先保存到服器上,然後再文件路通JSON返回,之後才可以行下,然由於是性存放,所以下完后就需要上除相的文件。

以下是做法以生成Excel例(生成Excel的具步我就省略了,并不是此文章的重): 

1. 首先建Action生成Excel文件

[HttpPost]public JsonResult ExportExcel(){  DataTable dt = DataService.GetData();  var fileName = "Excel_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls";  //生成的文件保存到服器的目里  string fullPath = Path.Combine(Server.MapPath("~/temp"), fileName);   using (var exportData = new MemoryStream())  {    //如何生成Excel里就不明啦,我里Excel的操作使用的是 NPOI    Utility.WriteDataTableToExcel(dt, ".xls", exportData);     FileStream file = new FileStream(fullPath, FileMode.Create, FileAccess.Write);    exportData.WriteTo(file);    file.Close();  }   var errorMessage = "you can return the errors in here!";   //返回生成的文件名  return Json(new { fileName = fileName, errorMessage = "" });}

2. 建下用的 Action

[HttpGet][DeleteFileAttribute] //Action Filter, 下完后自除文件,性稍後解public ActionResult Download(string file){  //到服器文件目下相的文件  string fullPath = Path.Combine(Server.MapPath("~/temp"), file);  //返回文件象,里用的是Excel,所以文件使用了 "application/vnd.ms-excel"  return File(fullPath, "application/vnd.ms-excel", file);}

3. 由於要做到下完后自除文件,所以再建一 Action Filter

public class DeleteFileAttribute : ActionFilterAttribute{  public override void OnResultExecuted(ResultExecutedContext filterContext)  {    filterContext.HttpContext.Response.Flush();    //前filter context成具操作的文件并取文件路    string filePath = (filterContext.Result as FilePathResult).FileName;    //有文件路后就可以直接除相文件了    System.IO.File.Delete(filePath);  }}

4. 最后在前添加 Ajax 用的代:

//里我使用了 blockUI 做loading...$.blockUI({ message: '<h3>Please wait a moment...</h3>' });  $.ajax({  type: "POST",  url: '@Url.Action("ExportExcel","YourController")', //用相的controller/action  contentType: "application/json; charset=utf-8",  dataType: "json",}).done(function (data) {  //console.log(data.result);  $.unblockUI();  //接收返回的文件路,此文件已保存到服器上了  if (data.fileName != "") {    //通用 window.location.href 直接跳到下 action 行文件下操作    window.location.href = "@Url.RouteUrl(new { Controller = "YourController", Action = "Download"})/?file=" + data.fileName;  }});

5. 完!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表