上传大文件(超过 4GB)ASP .NET CORE 5

T.E*_*les 4 c# file-upload asp.net-core

一直关注 MS 提供的文件上传示例以及此处的各种其他示例;经过很多天的尝试让它发挥作用后,我陷入了困境。

我需要能够上传高达 10GB 的文件 - 我正在使用流式传输物理方法。我更改了请求大小限制。我使用的是 IIS,因此我关闭了请求过滤以接受超过 4GB 的文件。但我选择的任何超过 4GB 的文件,控制器都会命中,然后出现意外的流结束错误。我有 DisableFormBinding 属性,我尝试启用缓冲,我尝试忽略 AntiForgeryToken - 我没有主意。

超过 4GB 的文件是否无法通过流式处理,我是否需要使用旧的分块方法?

Abd*_*mal 5

  • 如果您有那么大的文件,请不要在代码中使用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.
Run Code Online (Sandbox Code Playgroud)
  • 如果在未删除以前的临时文件的情况下创建了超过 65,535 个文件,则 Path.GetTempFileName 将引发 IOException。65,535 个文件的限制是每个服务器的限制。有关 Windows 操作系统上此限制的更多信息

2 -流媒体

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

有关更多详细信息:在 ASP.NET Core 5 中上传文件

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