Upload af store filer i asp.net

Det er ofte et krav, at der skal kunne uploade filer til en webapplikatione. Dette er heldigvis ret let, når der er tale om en ASP.NET webapplikation. Det giver dog til tider lidt problemer, når der skal kunne uploades større filer (over 4 Mb), men ikke større end at det også kan løses. Jeg vil her kort beskrive en løsning.

Ændr indstillingerne

Det er faktisk ikke mere kompliceret end, at ændre indstillingerne i web.config. Helt konkret er det elementet httpRuntime (som ligger under system.web-elementet), der skal ændres således:

<httpRuntime 
    maxRequestLength="8096" 
    requestTimeout="120" 
    requestLengthDiskThreshold="8096" />

Hvis du kører på en IIS 7+ skal du muligvis også tilføje  security-elementet (som ligger under sektion system.webServer-elementet) således:

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

Nu skulle du være i stand til at uploade 8 Mb i stedet for 4 Mb. Husk at requestTimeout skal være længere end den længste forventede tid der går fra en klient starter upload til det er færdigt, ellers fejler uploadoperationen med timeout i stedet.

Advarsel

Vær også opmærksom på, at højre grænser for mængden af data der kan sendes til en side i din webapplikation, kan have alvorlige konsekvenser for din sårbarhed overfor DOS-angreb, da det bla. vil optage en tråd i puljen indtil data er modtaget og behandlet. Mange af denne slags kald vil derfor risikere vil udsulte puljen af tråde til at behandle requests, hvilket medfører, at din applikation er nede. Derfor skal det overvejes nøje, hvis denne grænse sættes op til store værdier. Jeg har ikke fået undersøgt, om dette kan afbødes med async/await, men det var måske en mulighed. Dog vil du måske stadig ende med en ekstraregning for trafik efter et DOS-angreb af denne slags...

Se også

http://forums.asp.net/t/1810854.aspx er en tråd med reflektioner omkring dette emne og inspirationskilden til dette indlæg.

Comment