Загрузка большого файла (до 100 гб) через приложение ASP.NET

Мне нужно каким-то образом реализовать возможность загрузки файлов через приложение ASP.NET, которое работает в нашей корпоративной сети. Проблема в том, что эти файлы становятся все более значительными. На данный момент мы используем очень общую асинхронную загрузку, но проблема в том, что файлы становятся все более крупными, а максимальный предел в 3,9gb для каждого файла, установленный через maxAllowedContentLength, поскольку максимальное значение uint больше не позволит, Скоро файлы, которые пользователи будут загружать, превысят это значение и могут достигнуть размера до 100 гб.

Я попробовал поискать в Интернете какое-то решение этой проблемы, но в большинстве статей больших файлов люди в лучшем случае имеют значение 1gb.

Итак, есть ли способ загрузить действительно большие файлы (до 100 г) через приложение ASP.NET MVC\WebAPI или мне нужно искать альтернативные решения?

Ответы

Ответ 2

Вы можете рассмотреть возможность отправки его в куски. Это пропустит требование большого файла (поскольку каждый запрос будет только размером отправленного вами блока), но немного сложнее на стороне клиента и сервера.

Я сделал что-то подобное для потоковой передачи загруженных файлов через websocket, но это можно было легко сделать с помощью нескольких запросов ajax. В любом случае вы захотите использовать API JavaScript файлов, чтобы прочитать сегмент файла на клиентском компьютере, закодировать этот сегмент на то, что вы может отправить (возможно, Base64) и отправить этот конкретный сегмент на веб-сервер. Вы также можете отправить дополнительные данные, такие как положение файла, чтобы сервер правильно записывал файл. Сервер может выбрать способ ответа (может быть таким же простым, как "истина" для подтверждения получения), после чего клиентский javascript будет читать и отправлять следующий фрагмент файла.

У меня есть демонстрация этого использования WebSockets в github repo здесь (Серверный код ASP.NET MVC здесь), но с некоторыми изменениями вы можете легко сделать это в последовательные запросы AJAX.