【问题标题】:Prevent FileResult chunked response防止 FileResult 分块响应
【发布时间】:2017-02-21 06:23:19
【问题描述】:

我有一个向用户发送文件的 ASP.NET Core 1.2 应用程序。为此,我使用FileResult。我的代码如下:

return PhysicalFile(Path.GetFullPath(filePath), QMimeTypeMap.GetMimeType(Path.GetExtension(file.Name)));

我曾尝试使用https://github.com/aspnet/BasicMiddleware/blob/dev/samples/ResponseBufferingSample/Startup.cs#L17 中的响应缓冲,但它对我不起作用。

这会正确返回文件,但使用Transfer-Encoding: Chunked,这会导致下载以“不确定”形式出现,即没有进度条。我曾尝试自己设置Content-Length 标头,但它会自动删除。

编辑:请注意,如上所述,我已经尝试过响应缓冲。这并没有解决我的问题。

EDIT 2:以下是我使用的代码的SSCCE

FilesController.cs > 动作

[HttpGet("files")]
public async Task<IActionResult> Download(string driveName, [Bind(Prefix = "id")] uint? fileId = null, [Bind(Prefix = "download")] int forceDownload = 0)
{
    // Send file info
    string filePath = "...";
    HttpContext.Response.Headers["Content-Length"] = new System.IO.FileInfo(filePath).Length.ToString();
    return PhysicalFile(Path.GetFullPath(filePath), QMimeTypeMap.GetMimeType(Path.GetExtension(filePath)));
}

Startup.cs > 配置

app.UseStaticFiles();
app.UseResponseBuffering();
app.UseMvc();

【问题讨论】:

  • 您没有阅读我的问题。我已经提到我尝试过响应缓冲但没有奏效。我什至链接到同一个例子,说它不起作用。
  • 尽管您尝试通过设置此配置来禁用分块,但您的代码无处显示。您的代码示例非常简约,因此很难为您提供帮助。然后请给我们一个最小可行的可复制示例。
  • @JoelHarkes 我在我的问题中添加了更多代码。如果您在重现该问题时仍有任何困难,请告诉我。

标签: asp.net-core chunked-encoding kestrel-http-server fileresult


【解决方案1】:

这似乎是 BrowserLink 中间件中的一个错误。不久前,它被 MS 修补了。在https://github.com/aspnet/Mvc/issues/5999 阅读全文。

【讨论】:

    猜你喜欢
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2019-11-08
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多