【问题标题】:ASP.NET Core Response headers on a FileStreamResultFileStreamResult 上的 ASP.NET Core 响应标头
【发布时间】:2017-08-02 22:52:16
【问题描述】:

我正在从 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 核心中的新功能,它不能按预期工作,或者我只是没有完全理解。谁能给我一个带有 asp.net 核心代码的文件下载的工作示例。

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:

    如果您有文件大小,您可以在返回 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")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多