【问题标题】:Uploading Large FIles (Over 4GB) ASP .NET CORE 5上传大文件(超过 4GB)ASP .NET CORE 5
【发布时间】:2021-09-09 23:47:24
【问题描述】:

一直在关注 MS 提供的文件上传示例,以及此处的各种其他示例;在尝试了很多天之后,我被卡住了。

我需要能够上传最大 10GB 的文件 - 我正在使用流物理方法。我已更改请求大小限制。我正在使用 IIS,所以我关闭了请求过滤以获取超过 4GB 的文件以被接受。但是我选择的任何超过 4GB 的文件,控制器都会命中,然后出现 Unexpected end of stream 的错误。我有 DisableFormBinding 属性,我尝试过启用缓冲,我尝试过忽略 AntiForgeryToken - 我没有想法。

超过 4GB 的文件不可能通过流式传输,我需要使用旧的分块方法吗?

【问题讨论】:

标签: c# asp.net-core file-upload


【解决方案1】:
  • 如果您有这么大的文件,切勿在代码中使用byte[]MemoryStream。仅当您下载/上传文件时才对流进行操作。
  • ASP.NET Core 支持对较小的文件使用缓冲模型绑定上传一个或多个文件,对较大的文件使用无缓冲流式传输 文件。

文件上传场景 上传文件的两种通用方法是缓冲和流式传输。

1 - 缓冲

整个文件被读入IFormFile,这是用于处理或保存文件的文件的 C# 表示形式。

文件上传使用的资源(磁盘、内存)取决于并发文件上传的数量和大小。如果应用程序尝试缓冲过多的上传内容,则站点会在内存或磁盘空间不足时崩溃。如果文件上传的大小或频率耗尽了应用资源,请使用流式传输。

Any single buffered file exceeding 64 KB is moved from memory to a temp file on disk.
  • 如果在不删除以前的临时文件的情况下创建了超过 65,535 个文件,Path.GetTempFileName 将引发 IOException。的极限 65,535 个文件是每个服务器的限制。有关 Windows 操作系统上此限制的更多信息

2 - Streaming

文件从多部分请求中接收并由应用程序直接处理或保存。流式传输不会显着提高性能。流式传输可减少上传文件时对内存或磁盘空间的需求。

更多详情:Upload files in ASP.NET Core 5

我认为this 可能会有所帮助:Upload Large Files To MVC / WebAPI Using Partitioning

【讨论】:

  • 谢谢 - 我认为分块是我唯一的选择,我会查看链接。
【解决方案2】:

如果您在 IIS 上托管 Web 应用程序,因为在 IIS 级别,您有一个过滤器,不允许您上传如此大的文件。您可以直接在 IIS 中解锁此过滤器。如果你正在使用它,你还需要配置 Kestrel。更多信息可以在这里找到。 https://www.webdavsystem.com/server/documentation/large_files_iis_asp_net/

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 2016-12-28
    相关资源
    最近更新 更多