在PHP中,可以通过使用正确的标头回显文件到浏览器。您无需先在服务器上保存它的副本。
假设我有一堆数据我希望作为excel文件返回 - 在使用OpenXML创建数据结构后,如何在不将其保存在服务器上的情况下将文件提供给用户?
答案 0 :(得分:11)
实际上这很简单。在您的控制器中,您可以执行以下操作:
public ActionResult GetMyFile()
{
//dynamically generate a file
System.IO.MemoryStream ms;
ms = GenerateFile(); // Some function to return a memorystream object
// return the file
return File(ms.ToArray(), "filename.pdf");
}
将向用户显示一个对话框,询问他们是否要打开文件或保存文件。
答案 1 :(得分:9)
通过设置FileStream
,ContentType
和FileDownloadName
属性,将您的数据写入流并通过FileStreamResult中的控制器操作方法返回。
[HttpGet]
public FileStreamResult MyFile()
{
var fileStreamResult = new FileStreamResult (GetMyContentAsStream(), "my/content-type-here");
fileStreamResult.FileDownloadName = "my-file-download-name.here";
return fileStreamResult ;
}
<强>更新强> 这样做的捷径是使用Controller.File()方法。
[HttpGet]
public FileStreamResult MyFile()
{
return File(GetMyContentAsStream(), "my/content-type-here");
}
答案 2 :(得分:2)
您可以将动态生成的文件的内容保存在MemoryStream
对象中。返回文件时,可以使用MemoryStream的GetBuffer()
方法将字节数组作为第一个参数传递。然后设置ContentType
和FileDownloadName
参数。
此致