我需要在ASP.NET MVC中实现文件下载.在网上搜索,我找到了这样的代码:
public ActionResult GetFile()
{
return File(filename, "text/csv", Server.UrlEncode(filename));
}
Run Code Online (Sandbox Code Playgroud)
这很好,但我想动态创建此文件的内容.
我意识到我可以动态创建文件,然后使用上面的语法下载该文件.但是,如果我能直接将我的内容直接写入回复,那会不会更有效率?这可能在MVC中吗?
Jon*_*ood 14
这是我最终使用的代码的过度简化版本.它符合我的需求.
[HttpGet]
public ActionResult GetFile()
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=myfile.csv");
Response.ContentType = "text/csv";
// Write all my data
Response.Write(...);
Response.End();
// Not sure what else to do here
return Content(String.Empty);
}
Run Code Online (Sandbox Code Playgroud)
另一种解决方案是使用接受流的 File() 重载。
就我而言,我需要从控制器操作生成一个 csv,所以它有点像这样:
[HttpGet]
public ActionResult DownloadInvalidData(int fileId)
{
string invalidDataCsv = this.importService.GetInvalidData(fileId);
string downloadFileName = "error.csv";
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(invalidDataCsv);
writer.Flush();
stream.Position = 0;
return File(stream, "text/csv", downloadFileName);
}
Run Code Online (Sandbox Code Playgroud)
请注意,在将 Stream 或 StreamWriter 传递给 File() 函数之前,不应将其丢弃,因为丢弃其中任何一个都会关闭流,使其无法使用。
| 归档时间: |
|
| 查看次数: |
15230 次 |
| 最近记录: |