Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 返回excel文件,但不将其保存在控制器内的服务器中_Asp.net Mvc_Excel_Asp.net Mvc 5_Npoi - Fatal编程技术网

Asp.net mvc 返回excel文件,但不将其保存在控制器内的服务器中

Asp.net mvc 返回excel文件,但不将其保存在控制器内的服务器中,asp.net-mvc,excel,asp.net-mvc-5,npoi,Asp.net Mvc,Excel,Asp.net Mvc 5,Npoi,我想将Excel文件(使用NPOI库)返回给用户,而无需先将文件保存在服务器中。这是我的密码: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Report(SalesReportViewModel model) { if (ModelState.IsValid) { XSSFWorkb

我想将Excel文件(使用NPOI库)返回给用户,而无需先将文件保存在服务器中。这是我的密码:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Report(SalesReportViewModel model)
        {
            if (ModelState.IsValid)
            {
                XSSFWorkbook wb = context.GetReport(model);
                //I have no idea what to return after I got my wb
            }

            return View();
        }

任何帮助都将不胜感激。

此堆栈溢出问题包含您的答案。

[HttpPost]
公共HttpResponseMessageExportReport([FromBody]DTOs.Report)
{
尝试
{
IReportPersistenceManager=ContainerConfiguration.Instance.Resolve();
MemoryStream ms=新的MemoryStream();
//我们必须传递到NOPI汇编文件类型以及文件名
//由于我们现在只处理excel,我们将设置它,但这可以在以后配置。
long id=report.ReportId;
字符串mimeType=“application/vnd.ms excel”;
字符串filename=“未知”;
manager.ExportDataToExcel(id,(名称,mime)=>
{
mimeType=mime;
filename=名称;
返回ms;
});
ms.Position=0;
var response=新的HttpResponseMessage();
response.Content=newbytearray内容(ms.ToArray());
response.Content.Headers.ContentType=新的MediaTypeHeaderValue(“application/vnd.ms excel”);
返回(响应);
}
捕获(例外)
{
//错误
返回新的HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);
}
}
[HttpPost]
public HttpResponseMessage ExportReport([FromBody]DTOs.Report report)
{
  try
     {
      IReportPersistenceManager manager = ContainerConfigurator.Instance.Resolve<IReportPersistenceManager>();

      MemoryStream ms = new MemoryStream();
      //we have to pass to the NOPI assemble file type as well as file name 
     //since we only deal with excel for now we will set it but this could be configured later.
      long id = report.ReportId;
      string mimeType = "application/vnd.ms-excel";
      string filename = "unknown";
      manager.ExportDataToExcel(id, (name, mime) =>
      {
       mimeType = mime;
       filename = name;
       return ms;
      });
     ms.Position = 0;

    var response = new HttpResponseMessage();
    response.Content = new ByteArrayContent(ms.ToArray());
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-excel");       
   return (response);
   }
   catch (Exception)
   {
   //error
   return new HttpResponseMessage(System.Net.HttpStatusCode.BadRequest);
   }
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Report(SalesReportViewModel model)
{
    if (ModelState.IsValid)
    {
        XSSFWorkbook wb = context.GetReport(model);

        byte[] fileContents = null;
        using (var memoryStream = new MemoryStream())
        {
            wb.Write(memoryStream);
            fileContents = memoryStream.ToArray();
        }

        return File(fileContents, System.Net.Mime.MediaTypeNames.Application.Octet, "file.xlsx");
    }

    return View();
}