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 目录。