ASP.NET Core 文件下载响应类型

1. FileResult

FileResult 是一个基类,定义了所有文件响应结果的通用属性和方法。

它通常不直接用于创建响应,而是由其派生类来实现具体的文件传输逻辑。

2. FileContentResult

FileContentResult 类用于将字节数组作为文件内容返回给客户端。

它通常用于较小的文件,因为整个文件内容都会被加载到内存中

C#
  [HttpGet("DownLoad")]
  public FileContentResult GetFile(string filename)
  {
      string filePath = "D:\\BSapp";
      var file = System.IO.File.ReadAllBytes($"{filePath}\\{filename}");

      return File(file, "text/plain", "downloadedfile.txt");
  }

File 方法是 ControllerBase 类的一个便捷方法,用于创建 FileContentResult 实例。

第一个参数是文件的字节数组,第二个参数是 MIME 类型(指定文件的类型),第三个参数是建议给客户端保存的文件名。

3. FileStreamResult

FileStreamResult 类允许你通过文件流来传输文件内容,这对于大文件特别有用,因为它可以避免将整个文件加载到内存中。

C#
 [HttpGet("DownLoad")]
 public FileStreamResult GetFile(string filename)
 {
     string filePath = "D:\\BSapp";

     using FileStream?stream = new FileStream($"{filePath}\\{filename}", FileMode.Open);

     return  File(stream, "text/plain", "downloadedfile.txt");
 }

与 FileContentResult 类似,FileStreamResult 也使用 File 方法来创建实例。

但这次我们传递的是一个 FileStream 对象,它代表文件的流。

3. PhysicalFileResult

PhysicalFileResult 类允许你通过物理文件路径来提供文件内容。

ASP.NET Core 会负责打开文件、读取内容并发送给客户端。

C#
  [HttpGet("DownLoad")]
  public PhysicalFileResult GetFile(string filename)
  {
      string filePath = "D:\\BSapp";

      string fileLocalName = $"{filePath}\\{filename}";

      return PhysicalFile(fileLocalName, "text/plain", Path.GetFileName(fileLocalName));
  }

PhysicalFile 方法直接接收文件的物理路径,并返回 PhysicalFileResult 实例。ASP.NET Core 会处理文件的读取和传输。

4. VirtualFileResult

VirtualFileResult 类用于提供嵌入在应用程序中的虚拟文件路径。

这通常用于从应用程序的 wwwroot 目录提供静态文件。

C#
   [HttpGet("DownLoad")]
   public VirtualFileResult GetFile(string filename)
   {
       var filePath = Path.Combine(env.WebRootPath, filename);

     return File(filePath,"text/plain","2.txt");
   }

env 是 IWebHostEnvironment 的实例,它提供了对应用程序环境的访问,包括 WebRootPath 属性,该属性指向 wwwroot 目录。

订阅评论
提醒
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
滚动至顶部