web-dev-qa-db-fra.com

Téléchargement d'un fichier volumineux (jusqu'à 100 Go) via l'application ASP.NET

Je dois en quelque sorte implémenter une capacité à télécharger des fichiers via une application ASP.NET qui fonctionne au sein de notre réseau d'entreprise. Le problème est que ces fichiers deviennent de plus en plus volumineux. Pour le moment, nous utilisons un téléchargement asynchrone très générique, mais le problème est que les fichiers deviennent de plus en plus volumineux et que la limite maximale de 3,9 Go par fichier est définie via maxAllowedContentLength puisque la valeur maximale de uint ne permettra rien de plus. Bientôt, les fichiers que les utilisateurs sont censés télécharger dépasseront cette valeur et pourraient atteindre jusqu'à 100 Go.

J'ai essayé de chercher en ligne une solution à ce problème, mais dans la plupart des articles par fichiers volumineux, les gens signifient au mieux 1 Go.

Existe-t-il un moyen de télécharger des fichiers très volumineux (jusqu'à 100 g) via l'application ASP.NET MVC\WebAPI ou dois-je rechercher des solutions alternatives?

20
user3223738

Oui, vous devez diviser le fichier en parties plus petites, voir l'exemple ici: http://forums.asp.net/t/1742612.aspx?How+to+upload+a+big+file+ en + Mvc +

7

Vous pourriez envisager de l'envoyer en morceaux. Cela ignorerait l'exigence de fichiers volumineux (car chaque demande ne serait que la taille du bloc que vous envoyez), mais est légèrement plus compliquée côté client et côté serveur.

J'ai fait quelque chose de similaire pour diffuser des fichiers téléchargés sur une prise Web, mais cela pourrait facilement être fait avec plusieurs demandes ajax. Dans les deux cas, vous voudrez utiliser JavaScript File API pour lire un segment du fichier sur l'ordinateur du client, coder ce segment en quelque chose que vous pouvez envoyer (probablement Base64) et envoyer ce segment particulier au serveur Web. Vous pouvez également envoyer des données supplémentaires telles que la position du fichier pour vous assurer que le serveur écrit correctement le fichier. Le serveur peut choisir comment répondre (cela peut être aussi simple qu'un "vrai" pour accuser réception), après quoi le client javascript lira et enverra le morceau suivant du fichier.

J'ai une démonstration de cela en utilisant WebSockets sur un dépôt github ici ( code côté serveur ASP.NET MVC ici ) mais avec quelques ajustements, vous pouvez facilement le transformer en séquentiel AJAX requêtes.

3
RTigger