T.Eeles
T.Eeles

Reputation: 51

Uploading Large FIles (Over 4GB) ASP .NET CORE 5

Been following the file upload samples MS offer, and various other examples on here; and after many days of trying to get this to work I am stuck.

I need to be able to upload files up to 10GB - I am using the streaming physical method. I have changed the Request Size limit. I am using IIS, so I have turned off Request Filtering to get a file over 4GB to be accepted. But any file over 4GB I choose, the controller hits and then errors with Unexpected end of stream. I have the DisableFormBinding attribute, I have tried enabling buffering, I have tried ignoring the AntiForgeryToken - I am out of ideas.

Is a file over 4GB impossible to do via streaming, do I need to use an older chunking method?

Upvotes: 5

Views: 9925

Answers (2)

Tupac
Tupac

Reputation: 2910

If you host your web application on IIS, because at the IIS level, you have a filter that does not allow you to upload such large files. You can unlock this filter directly in IIS. If you are using it, you also need to configure Kestrel. More information can be found here. https://www.webdavsystem.com/server/documentation/large_files_iis_asp_net/

Upvotes: 0

Abdelrahman Gamal
Abdelrahman Gamal

Reputation: 510

  • If you have files that large, never use byte[] or MemoryStream in your code. Only operate on streams if you download/upload files.
  • ASP.NET Core supports uploading one or more files using buffered model binding for smaller files and unbuffered streaming for larger files.

File upload scenarios Two general approaches for uploading files are buffering and streaming.

1 - Buffering

The entire file is read into an IFormFile, which is a C# representation of the file used to process or save the file.

The resources (disk, memory) used by file uploads depend on the number and size of concurrent file uploads. If an app attempts to buffer too many uploads, the site crashes when it runs out of memory or disk space. If the size or frequency of file uploads is exhausting app resources, use streaming.

Any single buffered file exceeding 64 KB is moved from memory to a temp file on disk.
  • Path.GetTempFileName throws an IOException if more than 65,535 files are created without deleting previous temporary files. The limit of 65,535 files is a per-server limit. For more information on this limit on Windows OS

2 - Streaming

The file is received from a multipart request and directly processed or saved by the app. Streaming doesn't improve performance significantly. Streaming reduces the demands for memory or disk space when uploading files.

for more details : Upload files in ASP.NET Core 5

I think this might help: Upload Large Files To MVC / WebAPI Using Partitioning

Upvotes: 6

Related Questions