【问题标题】:How to download big CSV files(about 250MB) while running on IIS10? Content-length=0如何在 IIS10 上运行时下载大 CSV 文件(约 250MB)?内容长度=0
【发布时间】:2021-07-10 15:45:26
【问题描述】:

我在 IIS 10 上托管了 .net5.0 REST API。我想要一种通过 CSV 文件导出数据的方法。

代码示例:

[HttpGet]
[Route("download-file")]
[ProducesResponseType(typeof(FileContentResult), StatusCodes.Status200OK)]
public ActionResult DownloadFile()
{
    var data = GetData();
    using (var ms = new MemoryStream())
    {
        using (var sw = new StreamWriter(stream: ms, encoding: new UTF8Encoding(true)))
        {
            using (var cw = new CsvWriter(sw, CultureInfo.InvariantCulture, true))
            {
                cw.WriteRecords(data);
            }
            return File(ms.ToArray(), "application/octet-stream", "fileName.csv");
        }
    }
}

在数据不多的情况下有效。

当文件大小增加到 250MB 时出现问题,然后我得到 content-length: 0 没有任何错误。仅当 API 托管在 IIS 上时才会发生这种情况,当我将 API 托管在 Kestrel 中时一切正常。

我猜 IIS 有一些响应内容长度限制。 我尝试在 requestFiltering 中的 IIS 中直接设置 web.config/maxAllowedContentLength 属性,但没有结果。

有人知道如何解决这个问题吗?

【问题讨论】:

  • 不要使用 MemoryStream 或 byte[] 数组。现在,代码甚至在开始将数据发送到浏览器之前,都会在内存中创建 两个 数据副本。顺便说一句,CSV 文件是文本文件,而不是二进制文件。正确的内容类型是text/csv

标签: asp.net-core iis asp.net-web-api .net-5


【解决方案1】:

IIS 的下载/上传限制为 28.6MB。您将需要增加您的限额。您可以通过编辑文件夹中的 Web.config 文件来做到这一点(不是 Visual Studio 项目所必需的)。

<system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="{Your Number Here: Example 2147483648}" />
      </requestFiltering>
   </security>
</system.webServer>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-07
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2023-03-05
    相关资源
    最近更新 更多