Comment augmenter la taille maximale du fichier de téléchargement dans ASP.NET?

238

J'ai un formulaire qui exclut un téléchargement de fichier dans ASP.NET. J'ai besoin d'augmenter la taille de téléchargement maximale au-dessus des 4 Mo par défaut.

J'ai trouvé à certains endroits référençant le code ci-dessous sur msdn .

[ConfigurationPropertyAttribute("maxRequestLength", DefaultValue = )]

Aucune des références ne décrit réellement comment l'utiliser, et j'ai essayé plusieurs choses sans succès. Je souhaite uniquement modifier cet attribut pour certaines pages qui demandent le téléchargement de fichiers.

Est-ce la bonne route à suivre? Et comment dois-je l'utiliser?

Eddie
la source
Êtes-vous sûr qu'il s'agit d'une limitation de code et non d'une limitation d'hôte? IIS a également une limite.
MrChrister
J'étais presque sûr que c'était une limitation .Net. La réponse ci-dessous a fonctionné pour moi.
Eddie

Réponses:

406

Ce paramètre va dans votre fichier web.config. Cela affecte toute l'application, cependant ... Je ne pense pas que vous puissiez le définir par page.

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xxx" />
  </system.web>
</configuration>

"xxx" est en Ko. La valeur par défaut est 4096 (= 4 Mo).

Eric Rosenberger
la source
6
Cela m'a fait travailler pour tout le site. Je le mets à 10240 (ou 10 Mo) pour l'instant. Merci!
Eddie
12
Voir ma réponse si vous exécutez IIS7 + et que cela ne fonctionne pas.
4imble
Est-il possible de limiter cela à un seul contrôleur?
Guillermo Varini
@Eddie j'ai deux fichiers web.config je les ai utilisés dans les deux mais cela ne fonctionne pas. Comment puis-je le faire ?
Ahmad
2
Cela est également possible sur un chemin spécifique. <location path = "Api / Controller"> <system.web> <authorization> <allow users = "*" /> </authorization> <httpRuntime maxRequestLength = "102400" /> </system.web> </location> (étiquette d'autorisation non nécessaire)
nios
182

Pour IIS 7+, ainsi que l'ajout du paramètre httpRuntime maxRequestLength, vous devez également ajouter:

  <system.webServer>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="52428800" /> <!--50MB-->
      </requestFiltering>
    </security>
  </system.webServer>

Ou dans IIS (7):

  • Sélectionnez le site Web que vous souhaitez autoriser à accepter les téléchargements de fichiers volumineux.
  • Dans la fenêtre principale, double-cliquez sur «Demander le filtrage»
  • Sélectionnez "Modifier les paramètres des fonctionnalités"
  • Modifier la «longueur de contenu maximale autorisée (octets)»
4imble
la source
J'ai oublié les kilo-octets: p
Andrew Myhre
10
vous devrez probablement définir les deux maxRequestLength et maxAllowedContentLengthle faire fonctionner ... voir stackoverflow.com/questions/6327452/…
MikeM
7
@AndrewMyhre maxAllowedContentLength est en octets, pas en Ko. Les documents Microsoft indiquent que la valeur par défaut est de 30 Mo.
Dan Randolph
1
@DanRandolph en fait la valeur par défaut est 30000000 (environ 28,6 Mo), comme indiqué
aaaantoine
Vous avez certainement besoin des deux paramètres.
mohrtan
74

Pour augmenter la limite de taille du fichier de téléchargement, nous avons deux façons

1. IIS6 ou inférieur

Par défaut, dans ASP.Net la taille maximale d'un fichier à télécharger sur le serveur est d' environ 4Mo . Cette valeur peut être augmentée en modifiant l' attribut maxRequestLength dans web.config .

N'oubliez pas: maxRequestLenght est en Ko

Exemple : si vous souhaitez limiter les téléchargements à 15 Mo, définissez maxRequestLength sur «15360» (15 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

2. IIS7 ou supérieur

Une manière légèrement différente utilisée ici pour télécharger des fichiers.IIS7 a introduit un module de filtrage des demandes.Ce qui s'exécutait avant ASP.Net.Le fonctionnement du pipeline est que la valeur IIS ( maxAllowedContentLength ) vérifiée en premier, puis la valeur ASP.NET ( maxRequestLength ) est vérifiée. Par défaut, l'attribut maxAllowedContentLength est de 28,61 Mo. Cette valeur peut être augmentée en modifiant les deux attributs dans le même web.config .

N'oubliez pas: maxAllowedContentLength est en octets

Exemple : si vous souhaitez limiter les téléchargements à 15 Mo, définissez maxRequestLength sur «15360» et maxAllowedContentLength sur «15728640» (15 x 1024 x 1024).

<system.web>
   <!-- maxRequestLength for asp.net, in KB --> 
   <httpRuntime maxRequestLength="15360" ></httpRuntime> 
</system.web>

<system.webServer>              
   <security> 
      <requestFiltering> 
         <!-- maxAllowedContentLength, for IIS, in bytes --> 
         <requestLimits maxAllowedContentLength="15728640" ></requestLimits>
      </requestFiltering> 
   </security>
</system.webServer>

Lien de référence MSDN : https://msdn.microsoft.com/en-us/library/e1f13641(VS.80).aspx

Malik Khalil
la source
17

Je crois que cette ligne dans le web.config définira la taille maximale de téléchargement:

<system.web>

        <httpRuntime maxRequestLength="600000"/>
</system.web>
ben
la source
Après avoir passé la moitié de la journée, c'est ce qui m'a aidé !!! Merci beaucoup !!!
Sagar Khatri
13

pour une limite maximale de 2 Go, sur votre application web.config:

<system.web>
  <compilation debug="true" targetFramework="4.5" />
  <httpRuntime targetFramework="4.5" maxRequestLength="2147483647" executionTimeout="1600" requestLengthDiskThreshold="2147483647" />
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483647" />
    </requestFiltering>
  </security>
</system.webServer>
cangosta
la source
7

Si ses fenêtres 2003 / IIS 6.0, puis consultez AspMaxRequestEntityAllowed = "204800" dans le fichier metabase.xml situé dans le dossier C: \ windows \ system32 \ inetsrv \

La valeur par défaut de "204800" (~ 205 Ko) est à mon avis trop faible pour la plupart des utilisateurs. Modifiez simplement la valeur à ce que vous pensez être max.

Si vous ne pouvez pas enregistrer le fichier après l'avoir édité, vous devez soit arrêter le serveur ISS, soit activer le serveur pour autoriser l'édition du fichier:

texte alternatif
(source: itmaskinen.se )

Edit: je n'ai pas lu la question correctement (comment définir la maxrequest dans webconfig). Mais cette information peut être intéressante pour d'autres personnes, de nombreuses personnes qui déplacent leurs sites du serveur win2000 vers win2003 et avaient une fonction de téléchargement fonctionnelle et ont soudainement obtenu la requête Request.BinaryRead Failed l' utilisera. Je laisse donc la réponse ici.

Stefan
la source
5

J'ai le même problème dans un serveur IIS Win 2008, j'ai résolu le problème en ajoutant cette configuration dans le web.config:

<system.web>
    <httpRuntime executionTimeout="3600" maxRequestLength="102400" 
     appRequestQueueLimit="100" requestValidationMode="2.0"
     requestLengthDiskThreshold="10024000"/>
</system.web>

Le requestLengthDiskThreshold par défaut est de 80000 octets, il est donc trop petit pour mon application. requestLengthDiskThreshold est mesuré en octets et maxRequestLength est exprimé en kilo-octets.

Le problème est présent si l'application utilise un System.Web.UI.HtmlControls.HtmlInputFilecomposant serveur. L'augmentation du requestLengthDiskThreshold est nécessaire pour le résoudre.

Massimo Zerbini
la source
1
Selon msdn.microsoft.com/en-us/library/e1f13641(v=vs.100).aspx "Spécifie la limite du seuil de mise en mémoire tampon du flux d'entrée, en kilo-octets. Cette valeur ne doit pas dépasser l'attribut maxRequestLength." il devrait donc être au plus le même que la longueur de la demande?
Jeff
Oui @Jeff, la valeur de requestLengthDiskThreshold doit être inférieure à maxRequestLength, mais la première est exprimée en octets. Si requestLengthDiskThreshold est supérieur à maxRequestLength, une exception ConfigurationErrorsException doit être levée, afin que vous puissiez tester la valeur correcte par vous-même. Voir forums.asp.net/t/…
Massimo Zerbini
4

Si vous utilisez Framework 4.6

<httpRuntime targetFramework="4.6.1" requestValidationMode="2.0" maxRequestLength="10485760"  />
mbadeveloper
la source
4

La taille de fichier maximale peut être limitée à un seul contrôleur MVC ou même à une action.
La balise <location> web.config peut être utilisée pour cela:

<location path="YourAreaName/YourControllerName>/YourActionName>">
  <system.web>
    <!-- 15MB maxRequestLength for asp.net, in KB 15360 -->
    <httpRuntime maxRequestLength="15360" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 15MB maxAllowedContentLength, for IIS, in bytes 15728640 -->
        <requestLimits maxAllowedContentLength="15728640" />
      </requestFiltering>
    </security>
  </system.webServer>
</location>

Ou vous pouvez ajouter ces entrées dans le propre web.config de la zone.

Martin
la source
Cela devrait être plus élevé et utilisé à la place de la réponse acceptée, car c'est plus sûr pour valider la taille de la demande.
Jonathan Ortega
4

Je sais que c'est une vieille question.

Voici donc ce que vous devez faire:

Dans votre fichier web.config, ajoutez ceci dans <system.web>:

<!-- 3GB Files / in kilobyte (3072*1024) -->
<httpRuntime targetFramework="4.5" maxRequestLength="3145728"/>

et ce sous <system.webServer>:

<security>
    <requestFiltering>

      <!-- 3GB Files / in byte (3072*1024*1024) -->
      <requestLimits maxAllowedContentLength="3221225472" />

    </requestFiltering>
</security>

Vous voyez dans le commentaire comment cela fonctionne. Dans l'un, vous devez avoir le sie en octets et dans l'autre en kilo-octets. J'espère que cela pourra aider.

damir
la source
2

Vous pouvez écrire ce bloc de code dans votre fichier web.config d'application.

<httpRuntime maxRequestLength="2048576000" />
<sessionState timeout="3600"  />

En écrivant ce code, vous pouvez télécharger un fichier plus volumineux que maintenant

user3683243
la source
0

Si vous utilisez sharepoint, vous devez également configurer la taille maximale avec les outils d'administration: kb925083

Quiz
la source
0

J'ai un article de blog sur la façon d' augmenter la taille du fichier pour le contrôle de téléchargement asp .

De la poste:

Par défaut, le contrôle FileUpload permet de télécharger un maximum de 4 Mo de fichiers et le délai d'exécution est de 110 secondes. Ces propriétés peuvent être modifiées à partir de la section httpRuntime du fichier web.config. La propriété maxRequestLength détermine la taille de fichier maximale qui peut être téléchargée. La propriété executionTimeout détermine la durée maximale d'exécution.

sk1900
la source
0

Si cela fonctionne sur votre machine locale et ne fonctionne pas après le déploiement dans IIS (j'ai utilisé Windows Server 2008 R2), j'ai une solution.

Ouvrez IIS (inetmgr) Accédez à votre site Web À droite, accédez à Contenu (filtrage des demandes) Accédez à Modifier les paramètres des fonctionnalités Modifiez la taille maximale du contenu en (octets requis). Cela fonctionnera. Vous pouvez également obtenir de l'aide à partir du fil suivant http://www.iis.net/configreference/system.webserver/security/requestfiltering/requestlimits

Rahat Ali
la source
0

Si vous utilisez ssl cert, vos paramètres de pipeline ssl F5 configure.Important.

tayfun Kılıç
la source