Je continue à recevoir une exception SystemOutOfMemoryException lors du traitement de fichiers volumineux tels que 1,6 Go. Je me demandais simplement si ma configuration dans web.config est correcte. Vous trouverez ci-dessous les lignes de code que j'ai modifiées pour prendre en charge les fichiers volumineux de plus de 1 Go

<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" maxRequestLength="457286400" executionTimeout="3600" targetFramework="4.5" fcnMode="Single" />

<security>
  <requestFiltering>
    <requestLimits maxAllowedContentLength="3294967295" />
  </requestFiltering>
</security>

Je ne sais pas si c'est correct. J'ai également changé le serveur IIS pour qu'il s'exécute en x64 via Outils-> Options-> Projet et solutions-> Projets Web -> "Utiliser la version 65 bits d'IIS"

Je ne suis pas sûr de ce que je manque mais je continue à sortir le système de l'exception de mémoire même si j'ai déjà augmenté la taille de la mémoire

MISE À JOUR: Je traite des fichiers volumineux comme des fichiers .mp4 ou n'importe quel type de fichier, quel que soit le type, tant que le client en a besoin.

De plus, je ne télécharge pas le fichier en utilisant une interface. Ce que nous faisons est de télécharger le gros fichier via Filezilla et si le fichier est téléchargé sur le serveur, nous utilisons Umbraco MediaService pour traiter ce fichier afin d'avoir une entrée dans la page Media. Nous utilisons également Hangfire pour déclencher notre service d'arrière-plan pour traiter le MediaService

0
MadzQuestioning 15 août 2020 à 01:54

2 réponses

Meilleure réponse

J'ai réussi à résoudre ce problème en ajoutant un 2ème et un 3ème paramètre dans mon Umbraco MediaService. Au départ, j'utilisais Service.MediaService.Save(iMediaFile) mais il semble que lors de l'utilisation de gros fichiers, il fallait savoir qui a téléchargé le fichier, il a donc besoin du 2ème paramètre qui est l'ID utilisateur et j'ai ajouté le troisième paramètre pour supprimer tout message d'erreur. Comme je rencontrais une exception de mémoire insuffisante où en fait l'erreur était que je n'ai pas passé l'ID utilisateur dans le deuxième paramètre. Par conséquent, mon nouveau code est devenu Service.MediaService.Save(iMediaFile, user_id, false)

Encore une fois, la solution n'était pas vraiment une configuration car ma configuration était suffisante pour traiter le fichier. L'erreur était due à un 2e paramètre manquant

0
MadzQuestioning 22 août 2020 à 18:40

Accepter des fichiers volumineux comme celui-ci n'est pas une bonne pratique. Par exemple, cela donne la possibilité d'effectuer une attaque Ddos. Vous aurez également besoin de beaucoup de mémoire car le fichier sera géré en mémoire avant de le conserver sur le disque, d'où le problème que vous avez avec la mémoire.

La meilleure solution serait de les fragmenter avec du javascript et d'envoyer de petits paquets, puis de les recoudre côté serveur. Il existe une assez bonne explication sur la façon de le construire vous-même: https://www.dotnetcurry.com/aspnet-mvc/893/upload-big-files-aspnet-mvc-azure-storage (selon la façon dont vous gérez vos sessions, l'ajouter à la session peut ne pas résoudre votre problème de mémoire. Je suppose que vous devrez l'enregistrer sur le disque)

Sans rapport avec l'exception de mémoire, mais assurez-vous de placer ceci dans un <location path="xxx/yyy"> your web.config stuff </location> afin que seule cette URL accepte les fichiers volumineux.

1
dampee 22 août 2020 à 15:38