The usual problem is that the code that received the uploaded file will put the results into a byte array (byte[])
Those byte arrays are held entirely in memory. Depending on the version of your OS, the web server, amount of memory, etc, usually somewhere around 800MB of memory usage, IIS will recycle the worker process. This is done so that the entire server doesn't go down because a single request is using excessive amounts of memory.
Third party file uploaders use a variety of techniques to stream files a chunk at a time and can be used to upload files of muliple GBs without having memory usage go above a handful of kilobytes.
The streaming technique also has to be maintained for all layers of code that touch the file-- i.e. if a component writes it to file, it must stream and chunk, not accumulate the whole thing in a byte[] and write to file. Ditto for when the code is ultimately writing to the file to a BLOB column in the DB.