输出硬盘文件,提供下载 支持大文件、续传、速度限制、资源占用小
时间: 2023-08-06 14:03:50 浏览: 105
下载支持各种文件格式下载
在 ASP.NET Core 中,可以使用以下代码实现输出硬盘文件,提供下载功能,并支持大文件、续传、速度限制和资源占用小:
```csharp
public async Task<IActionResult> Download(string filePath)
{
var file = new FileInfo(filePath);
if (!file.Exists)
{
return NotFound();
}
var memory = new MemoryStream();
using (var stream = new FileStream(filePath, FileMode.Open))
{
await stream.CopyToAsync(memory);
}
memory.Position = 0;
var response = File(memory, GetContentType(filePath), file.Name);
response.EnableRangeProcessing = true;
response.FileDownloadName = file.Name;
response.LastModified = file.LastWriteTimeUtc;
response.EntityTag = new EntityTagHeaderValue("\"" + file.LastWriteTimeUtc.Ticks.ToString("x") + "\"");
return response;
}
private string GetContentType(string path)
{
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(path, out var contentType))
{
contentType = "application/octet-stream";
}
return contentType;
}
```
在上面的代码中,Download 方法用于输出指定路径的硬盘文件,使用 File 方法将文件流转换为文件下载响应,并启用了文件范围请求处理(Range Processing)。同时,还设置了文件下载名称、文件最后修改时间和实体标记(Entity Tag),以便浏览器可以正确处理文件下载请求。
值得注意的是,上述代码中使用了内存流(MemoryStream)而不是文件流(FileStream),这是为了避免在服务器上创建临时文件,从而减少资源占用。如果需要实现文件下载速度限制等高级功能,可以使用更复杂的技术,例如将文件分割为多个块并以一定的速率发送到客户端。
阅读全文