Då jag ska ladda upp filer använder jag mig av kontrollen HtmlInputFile. Jag får fel då jag laddar upp stora filer som tex en film. Efter att ha hämtat filen med kontrollen klickar jag på en knapp som ska ladda upp filen. Där har jag en felkontroll som kontrollerar om filen är större än 2mb. Detta är taget direkt från MSDN dokumentationen för HtmlInputFile Jag lade till i web.config: Du har ju satt begränsningen till 460 MB, du får sätta den högre ifall du vill ladda upp större filer. Det är sant... det låter rimligare att begränsningen anges i kB snarare än MB. Tänk att man inte behöver spekulera om man tittar i dokumentationen, som för övrigt är gratis och finns online :-D Jag förstår, men det jag vill är att om jag laddar upp en fil på 10Mb så vill jag visa ett felmeddelande "Filen får inte vara större än 4Mb". Du får välja en storlek och sätta som gräns i inställningarna. Över den storleken så kommer systemet att visa felmeddelande, under den storleken så kan du visa felmeddelandet. Problemet är att jag inte kan ta emot filen. Jag har ett FileField kontroll som jag hämtar tex en bild. Sen har jag en knapp för att ladda upp bilden till servern, men det är här problemet uppstår. Suben för att Du har satt maxstorleken till 4096 bytes. Försök med 1024 * 4000, det ger 4 096 000 bytes = 4 mb. Du måste också sätta maxRequestLength till ett högre värde. Om någon skickar upp en fil som är större än 4 mb kommer du att få fel iallafall. Du måste sätta maxRequestLength till ett högre värde än den största filstorlek du vill spara. Ifall servern stoppats, kan jag inte på något sätt styra så att användaren får se ett felmeddelande. För jag vill ju kunna kontrollera det med ett felmeddelande. Inte bara att jag får fram en sida där det står att sidan inte kan visas. Som sagt, ifall du vill kolla storleken på filen så måste du sätta maxRequestLength till ett högre värde. Okej, jag förstår nu. Men problemet är nu web.config filen. Den verkar inte fungera. Om jag sätter maxRequestLength till 1Mb och väljer en bild som är 2Mb så fungerar det ändå att ladda upp filen till servern. Där borde ju felmeddelandet ha visats. Så jag tror det är något fel i web.config. Är du säker att web.config filen ligger i rooten i din applikation och ingen undermapp? Jag testade att lägga in maxRequestLength i min web.config, och det fungerar för mig. Lite funderingar... maxRequestLength="2000000" är inte 2 MB, det är 2 GB. Storleken för maxRequestLength anges i kB. Jag har ändrat maxRequestLength till 2Mb. Laddar jag upp större filer så visas inte min felsida Det verkar inte som att det finns något du kan göra åt detta då det är "by design" i ASP.NET Jag vill ha en liknande koll, men jag vill ha en validator som kollar det, vet dock inte om det går. Kanske nån annan vet?HtmlInputFile.PosteFile problem
Problemet är att suben aldrig körs om det är för stor fil, utan jag skickas till en sida med samma adress men med följande fel:
"Sidan du söker efter är inte tillgänglig för tillfället. Det kan bero på tekniska problem med webbsidan eller så behöver du justera inställningarna för webbläsaren."
Ett litet exempel:
<code>
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If filHamtaFil.PostedFile.ContentLength > 20000 Then
Response.Write("hej")
End If
End Sub
</code>
1. Har PostedFile någon max filstorlek som man får ladda upp?
2. Varför körs inte suben?Sv: HtmlInputFile.PosteFile problem
"When uploading large files, use the maxRequestLength attribute of the <httpRuntime> element to
increase the maximum allowable file size. A DNS error is generated in the browser when the file exceeds
the specified size. You might also receive the following error message when uploading large files:
aspnet_wp.exe (PID: 1520) was recycled because memory consumption exceeded 460 MB (60 percent of
available RAM).
If you encounter this error message, increase the value of the memoryLimit attribute in the
processModel> element of the Web.config file for the application."
Hoppas detta är tillräcklig information för att du ska hitta rätt själv... annars är det bara att skicka utterligare en post i denna tråden så ska vi se vad vi kan göra =)
//AndreasSv: HtmlInputFile.PosteFile problem
<configuration>
<location>
<system.web>
<httpRuntime maxRequestLength="460"></httpRuntime>
....
Om jag provar lägga till en fil på 700Mb får jag fortfarande samma fel som ovan. JGa vill kunna kontrollera ett felmeddelande som säger att filen är för stor.
Vad ska jag göra?Sv: HtmlInputFile.PosteFile problem
Sv: HtmlInputFile.PosteFile problem
Sv: HtmlInputFile.PosteFile problem
"Indicates the maximum file upload size supported by ASP.NET. This limit can be used to prevent denial
of service attacks caused by users posting large files to the server. The size specified is in kilobytes. The
default is 4096 KB (4 MB)."
//AndreasSv: HtmlInputFile.PosteFile problem
Problemet är att aldrig Code-Behind körs så jag kan inte visa ett felmeddelande. Jag kommer istället till samma sida fast det står att sidan inte kan visas. Sv: HtmlInputFile.PosteFile problem
Ifall du vill visa felmeddelandet så måste du ju ta emot filen först. Därför kan du inte sätta gränsen högre än vad servern förväntas klara av.Sv: HtmlInputFile.PosteFile problem
"Ladda upp fil" körs aldrig eller med andra ord ingeting körs i code-behind så jag kan inte kontrollera något felmedelande.
Jag skickar med web.config så kanske ni kan se om den ser okej ut, det kanske är den som spökar.
<code>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<location>
<system.web>
<httpRuntime maxRequestLength="4096"></httpRuntime>
<compilation defaultLanguage="vb" debug="true">
<assemblies>
<add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.1.5000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
<add assembly="CrystalDecisions.ReportSource, Version=9.1.5000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
<add assembly="CrystalDecisions.Shared, Version=9.1.5000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
<add assembly="CrystalDecisions.Web, Version=9.1.5000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
</assemblies>
</compilation>
<customErrors mode="RemoteOnly" />
<authentication mode="Windows" />
<authorization>
<allow users="*" /> <!-- Allow all users -->
</authorization>
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false" timeout="20" />
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
<pages validateRequest="false" />
</system.web>
</location>
</configuration>
</code>
I suben ser felkontrollen ut så här:
<code>
If FileField.PostedFile.ContentLength > 4096 Then
Visa felmeddelande
Else
Ladda upp bild till servern
End If
</code>Sv: HtmlInputFile.PosteFile problem
Sv: HtmlInputFile.PosteFile problem
Ifall filen är större än maxRequestLength så ger servern felmeddelande. Ifall du då har samma storlek som din egen kontroll så kommer den aldrig att ge något felmeddelande eftersom alla filer som är större än så redan har stoppats av servern.Sv: HtmlInputFile.PosteFile problem
Kan jag kontrollera med ett felmeddelande och i så fall hur?
Ser web.config okej ut?Sv: HtmlInputFile.PosteFile problem
Ifall du vill visa ett eget felmeddelande om filen är större än maxRequestLength så får du göra en egen felmeddelandesida och lägga in på servern.Sv: HtmlInputFile.PosteFile problem
Verkar web.config filen vara okej som jag visat ovan?Sv: HtmlInputFile.PosteFile problem
Sv: HtmlInputFile.PosteFile problem
Testa med ett lågt värde och se om du kan få ett felmeddelande.Sv: HtmlInputFile.PosteFile problem
Det högsta värdet jag kan sätta maxRequestLength till är 2000000 bytes(2Mb).
Sätter jag ett högre värde kommer ett felmeddelande fram:
"Error while trying to run project: Unable to start debugging on the web server."
Innebär det att detta är maxstorleken, eller?
Laddar jag upp en fil på 7Mb och har maxRequestLength="2000000" så körs code-behind och jag kan visa ett felmeddelande i code-behind.
Det konstiga är ju att då borde ju felmeddelandesidan visas.
<code>
<customErrors mode="On" defaultRedirect="felsida.aspx"></customErrors>
</code>
Jag måste säga att jag inte har någon kontroll över detta?
Tex om jag vill lägga upp hemmagjorda filmer på min sida så går det alltså inte pga att PostedFile har ett maxvärde på 2Mb eller 4Mb(som Andreas skrev tidigare i denna tråd). Finns det inget annat så att man kan ladda upp större filer?
Varför jag vill ha en kontroll över detta är att det kommer vara personer som kommer att få behörighet att ladda upp filer och då kan alla möjliga filstorlekar hamna där av misstag.
Blev lite många frågor, men hoppas ni kan försöka reda ut detta för mig. har
läst men blir inte klokare :-(Sv: HtmlInputFile.PosteFile problem
Sv: HtmlInputFile.PosteFile problem
<code>
<customErrors mode="On" defaultRedirect="felsida.aspx"></customErrors>
</code
Varför jag vill ha en kontroll över detta är att det kommer vara personer som kommer att få behörighet att ladda upp filer och då kan alla möjliga filstorlekar hamna där av misstag. Då ska inte en sida visa "Sidan kan inte visas"
Är det ingen som har något kodexempel?Sv: HtmlInputFile.PosteFile problem
http://support.microsoft.com/default.aspx?scid=KB;en-us;q295626
Från Knowledge Base artiklen framgår det
"When the maxRequestLength attribute is set in the Machine.config file and then a request is posted (for example, a file upload) that exceeds the value of maxRequestLength, a custom error page cannot be displayed. Instead, Microsoft Internet Explorer will display a "Cannot find server or DNS" error message. "
Vad jag kunnat få fram så handlar det om att skydda mot t.ex DoS attacker mot en server. Det verkar som att det får bli 3e parts produkter om du vill kunna hantera situationer som denna.
//AndreasSv: HtmlInputFile.PosteFile problem