如何在ASP.NET Core中检测文件下载完成

时间:2019-03-25 18:21:21

标签: c# asp.net-core

我的Controller类中有以下代码:

[HttpPost]
public async Task<IActionResult> GetDataFile(string id, [FromBody] DataLog log)
{
   FileStream fileStream = System.IO.File.OpenRead($"{dataFile}_{id}.log");
   //using a using block or Close prevents the download...
   return File(fileStream, "application/octet-stream");
}

该文件应该是临时存在的,因此当客户端完成下载后,服务器应删除该文件

我知道当流打开时,我无法关闭它。

我应该使用什么回调?有最佳实践吗?

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作:

public FileResult GetDataFile(string id, [FromBody] DataLog log)
{
    var bytes = System.IO.File.ReadAllBytes("<absolute path of file here>");
    System.IO.File.Delete("<absolute path of file here>");
    return File(bytes, "application/octet-stream", "<name of file>");
}

因此,您将文件读入字节数组,然后删除物理文件并将字节数组返回给客户端。