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.