ASP.NET Core中的FileStreamResult响应标头

6

我正在从Azure Blob存储中下载一个.mp4文件并将其推送到UI。下载工作正常,问题在于似乎没有正确设置内容长度的标头。因此,您无法跟踪下载时间,因为浏览器只显示已下载的内容而不是剩余多少和预计时间。我的响应代码有误吗?还是应该更改请求?我的代码如下:

[HttpGet("VideoFileDownload")]
public IActionResult VideoFileDownloadAsync([FromQuery]int VideoId)
{
     ...code to get blob file
     return new FileStreamResult(blob.OpenRead(), new MediaTypeHeaderValue("application/octet-stream")
}

我尝试过各种请求和响应头,但没有任何作用。

这些文件很大,我知道旧的asp.net检查范围标头然后执行分块流的方式,但我想使用.net core中的新功能,但它并没有像预期的那样工作,或许是我对它理解不够透彻。能否有人给我提供一个带有asp.net core代码的文件下载的工作示例?

1个回答

5
如果您知道文件的大小,可以在返回FileStreamResult之前,在Response对象中设置响应的内容长度,例如:
[HttpGet("VideoFileDownload")]
public IActionResult VideoFileDownloadAsync([FromQuery]int VideoId)
{
     ...code to get blob file
     long myFileSize = blob.Length; // Or wherever it is you can get your file size from.
     this.Response.ContentLength = myFileSize;
     return new FileStreamResult(blob.OpenRead(), new MediaTypeHeaderValue("application/octet-stream")
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接