最近要使用ASP.NET CORE WEBAPI用来下载文件,使用的.NET CORE 3.1。考虑如下场景:
- 文件是程序生成的。
- 文件应该能兼容各种格式。
- 浏览器可以感知进行下载。
准备
经过简单的调研,得到以下结论。
- ASP.NET CORE 提供FileResult这种类型的ActionResult,可以直接返回文件结果,不需要直接处理HttpResponse。
- 通过Stream可以直接返回文件流供浏览器下载。
- FileStreamResult是FileResult的具体实现,返回值应该是此类对象。
- Stream有多种类型,适合直接内存中生成文件对象的是MemoryStream。
对目标有了基础的了解,就可以开始动手实现了。
实现
建立好ASP.NET CORE WEBAPI工程,把生成文件的代码独立出来一个函数。我这里需要是下载一个CSV格式的文件,因此生成一个CSV文件。对于磁盘上的文件,可以使用FileStream对象,由于我这里需要运行中生成这个文件,需要使用MemoryStream。
using var stream = new Memo