提供 ASP.NET Core webApi 下载文件接口代码示例并优化代码
时间: 2024-03-21 18:39:07 浏览: 238
好的,以下是一个简单的 ASP.NET Core WebAPI 下载文件的代码示例:
```csharp
[HttpGet("download/{fileName}")]
public async Task<IActionResult> DownloadFile(string fileName)
{
var filePath = Path.Combine(_env.ContentRootPath, "Files", fileName);
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
var contentType = MimeTypes.GetMimeType(fileName);
return File(memory, contentType, fileName);
}
```
其中,`MimeTypes.GetMimeType()` 方法是获取文件 MIME 类型的自定义方法,可以根据实际情况替换为其他方法。
接下来是对代码的优化:
1. 使用 `Path.GetFullPath()` 方法获取文件路径,可以避免拼接路径时出现错误。
2. 使用 `FileStream` 的 `using` 块来确保文件流被及时关闭,避免资源泄漏。
3. 使用 `memory.Position = 0` 将内存流的位置重置为开头,以确保文件从开头开始读取。
4. 使用 `File()` 方法返回文件结果,避免手动设置响应头信息。
优化后的代码如下:
```csharp
[HttpGet("download/{fileName}")]
public async Task<IActionResult> DownloadFile(string fileName)
{
var filePath = Path.GetFullPath(Path.Combine(_env.ContentRootPath, "Files", fileName));
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
var contentType = MimeTypes.GetMimeType(fileName);
return File(memory, contentType, Path.GetFileName(filePath));
}
```
注意,这里的 `_env` 是 `IWebHostEnvironment` 的实例,需要在构造函数中注入。另外,`MimeTypes.GetMimeType()` 方法需要根据实际情况实现。
阅读全文