J'écris une fonction de téléchargement et j'ai des problèmes pour attraper "System.Web.HttpException: la longueur maximale de la demande est dépassée" avec des fichiers plus grands que la taille maximale spécifiée httpRuntime
dans web.config (taille maximale définie sur 5120). J'utilise un simple <input>
pour le fichier.
Le problème est que l'exception est levée avant l'événement de clic du bouton de téléchargement, et l'exception se produit avant l'exécution de mon code. Alors, comment attraper et gérer l'exception?
EDIT: l'exception est lancée instantanément, donc je suis presque sûr que ce n'est pas un problème de délai d'attente en raison de connexions lentes.
c#
asp.net
httpexception
Marcus L
la source
la source
<input type="file" id="upload" name="upload" onchange="showFileSize();" />
InsideshowFileSize()
, vous pouvez afficher un message d'erreur basé sur la taille de votre fichier viavar input = document.getElementById("upload"); var file = input.files[0];
et ajouter une balise html.Réponses:
Il n'y a malheureusement pas de moyen facile d'attraper une telle exception. Ce que je fais est de remplacer la méthode OnError au niveau de la page ou Application_Error dans global.asax, puis de vérifier s'il s'agissait d'un échec de Max Request et, le cas échéant, de transférer vers une page d'erreur.
C'est un hack mais le code ci-dessous fonctionne pour moi
la source
httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge
- en utilisant System.Web.Management.WebEventCodesComme GateKiller l'a dit, vous devez changer le maxRequestLength. Vous devrez peut-être également modifier le executionTimeout au cas où la vitesse de téléchargement serait trop lente. Notez que vous ne voulez pas que l'un de ces paramètres soit trop gros, sinon vous serez ouvert aux attaques DOS.
La valeur par défaut pour executionTimeout est de 360 secondes ou 6 minutes.
Vous pouvez modifier maxRequestLength et executionTimeout avec l' élément httpRuntime .
ÉDITER:
Si vous souhaitez gérer l'exception malgré tout, comme cela a déjà été indiqué, vous devrez la gérer dans Global.asax. Voici un lien vers un exemple de code .
la source
Vous pouvez résoudre ce problème en augmentant la longueur maximale de la requête dans votre web.config:
L'exemple ci-dessus concerne une limite de 100 Mo.
la source
Si vous souhaitez également une validation côté client afin de réduire le besoin de lever des exceptions, vous pouvez essayer d'implémenter la validation de la taille du fichier côté client.
Remarque: cela ne fonctionne que dans les navigateurs prenant en charge HTML5. http://www.html5rocks.com/en/tutorials/file/dndfiles/
la source
Salut solution mentionnée par Damien McGivern, fonctionne uniquement sur IIS6,
Il ne fonctionne pas sur IIS7 et ASP.NET Development Server. J'obtiens la page affichant "404 - Fichier ou répertoire non trouvé."
Des idées?
ÉDITER:
Compris ... Cette solution ne fonctionne toujours pas sur ASP.NET Development Server, mais j'ai eu la raison pour laquelle elle ne fonctionnait pas sur IIS7 dans mon cas.
La raison en est qu'IIS7 a une analyse des demandes intégrée qui impose un plafond de fichier de téléchargement qui est par défaut de 30000000 octets (ce qui est légèrement inférieur à 30 Mo).
Et j'essayais de télécharger un fichier de taille 100 Mo pour tester la solution mentionnée par Damien McGivern (avec maxRequestLength = "10240" soit 10 Mo dans web.config). Maintenant, si je télécharge le fichier de taille> 10 Mo et <30 Mo, la page est redirigée vers la page d'erreur spécifiée. Mais si la taille du fichier est> 30 Mo, la vilaine page d'erreur intégrée affiche «404 - Fichier ou répertoire introuvable».
Donc, pour éviter cela, vous devez augmenter le max. longueur de contenu de demande autorisée pour votre site Web dans IIS7. Cela peut être fait en utilisant la commande suivante,
J'ai défini le max. longueur du contenu à 200 Mo.
Après avoir effectué ce paramètre, la page est redirigée avec succès vers ma page d'erreur lorsque j'essaye de télécharger un fichier de 100 Mo
Reportez-vous à http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx pour plus de détails.
la source
Voici une autre manière, qui n'implique aucun "hacks", mais nécessite ASP.NET 4.0 ou version ultérieure:
la source
Une façon de faire est de définir la taille maximale dans web.config comme cela a déjà été indiqué ci-dessus, par exemple
Ensuite, lorsque vous gérez l'événement de téléchargement, vérifiez la taille et si elle dépasse un montant spécifique, vous pouvez le piéger, par exemple
la source
Une solution qui fonctionne avec IIS7 et versions ultérieures: afficher une page d'erreur personnalisée lorsque le téléchargement de fichier dépasse la taille autorisée dans ASP.NET MVC
la source
Dans IIS 7 et au-delà:
Fichier web.config:
Vous pouvez ensuite enregistrer le code derrière, comme ceci:
Assurez-vous simplement que la [Taille en octets] dans le web.config est supérieure à la taille du fichier que vous souhaitez télécharger, vous n'obtiendrez pas l'erreur 404. Vous pouvez ensuite vérifier la taille du fichier dans le code en utilisant le ContentLength qui serait bien meilleur
la source
Comme vous le savez probablement, la longueur maximale de la demande est configurée en DEUX endroits.
maxRequestLength
- contrôlé au niveau de l'application ASP.NETmaxAllowedContentLength
- sous<system.webServer>
, contrôlé au niveau IISLe premier cas est couvert par d'autres réponses à cette question.
Pour attraper LE SECOND, vous devez le faire dans global.asax:
la source
Après le tag
ajouter la balise suivante
vous pouvez ajouter l'URL à la page d'erreur ...
la source
Vous pouvez résoudre ce problème en augmentant la longueur maximale de la requête et le délai d'exécution dans votre web.config:
-Veuillez clarifier le délai d'exécution maximum de la râpe, puis 1200
la source
Que diriez-vous de l'attraper à l'événement EndRequest?
la source
Il peut être vérifié via:
la source