Punkt 1 - du skal have httpRuntime med i din web.config fil.
Så har jeg brugt nedennævnte kode (oversat fra c# til vb - så undskyld, hvis oversætteren ikke har gjort det helt korrekt...)
If fuplOpskriftBillede.HasFile = True Then 'Hvis antal mb> 4 mb skal den fremkomme med en fejlbesked If fuplOpskriftBillede.PostedFile.ContentLength > 1000000 Then Else 'Laver en ny instans og finder filnavn Dim filInfo As New FileInfo(fuplOpskriftBillede.FileName)
'Laver en streng med stien og navn filen der uploades skal gemmes som Dim destination As String = Page.MapPath("~/Upload/Bruger/") + Convert.ToString(user_id) + "\" + filInfo.Name
'Upload af filen Try fuplOpskriftBillede.SaveAs(destination) billedenavn = filInfo.Name Catch End Try
'Gemmer billede i tabellen Try Dim opskriftapi As New OpskrifterApi()
If opskriftapi.SetOpskriftBillede(opskriftid, billedenavn) = Status.Success Then End If
Den står under <system.web> i mit tilfælde efter <pages>: <system.web> <pages> <controls> <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> <add namespace="AjaxControlToolkit" assembly="AjaxControlToolkit" tagPrefix="ajaxToolkit"/> </controls> </pages> <httpRuntime maxRequestLength="400000"/>
http://msdn.microsoft.com/en-us/library/e1f13641(VS.71).aspx: maxRequestLength 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).
Ok - men jeg har stadig det fænomen, at hvis jeg uploader en fil på fx. 9,2 MB med en <httpRuntime maxRequestLength="8000" />, så går skærmen bare i grå/fejl uden at noget gennemløbes?
Min erfaring er, at i web.config'en sættes den til f.eks. 10 mb og så i koden, hvor man tester for hvor meget den er (altså mindre end) skal den teste på mindre end 10 mb - f.eks. 9 mb....
Underligt - når du laver en "run to curser" - så fortæller den dig ikke nogen fejlmeddelelser - den springer bare If fuplOpskriftBillede.PostedFile.ContentLength > 8000 over?
Hov - nu er jeg forfærdelig dum til at regne de der bytes og kb om til mb...... Men er du sikker på, at de 8000 der står i web.config'en er større antal end det der står i din cs fil?
Forsøg at ændre web.config til 10000 og så gennemløb den igen......Som skrevet tidligere, har jeg den erfaring at web.config delen skal være større end det jeg tester på.....
Hvis jeg ændrer i web.config til 10000, så uploader den filen på 9,2 MB uden det mindste klynkeri! Det er kun hvis filen er over det, der står i web.config, at programmet går ned?
Ja det er også naturligt - der du fortæller, hvor stor max den må være altså filen....
Hmmmmm længe siden, jeg knoklede rundt i det - sæt den til 8 igen og kør en "run to curser" i din cs fil, og fortæl mig så hvad der helt nøjagtig sker lige før og under:
Det tror jeg, ikke har noget at gøre med, om det er VB eller c# - det er en VS ting.
Du klikker på en linie (skal være noget kode på den linie) ovenover, hvor du vil checke ud, hvad det er den gør og højreklikker med musen. Du kan nu vælge mellem forskellige punkter - der er et punkt der hedder "Run to Curser"
Den vælger du, og kører så din side (i dette tilfælde indtil upload delen, hvor du har lavet din "run to curser"), indtil den kører tilbage til din kode og den linie du stillede dig på i koden bliver gult.
Du har nu mulighed for at steppe dig stille og roligt igennem den efterfølgende kode. Enten ved F10 eller F11 - F10 = Step over F11 = Step into.
Er der fejl, vil du se dem (ligesom breakpoints). Men du kan hele tiden følge med, hvad sker hvornår - en rigtig god funktion, jeg bestemt ikke kan undvære.....bruger den 117 gange om dagen *griner*
Ok - jeg kendte bare ikke det udtryk! Det bruger jeg også meget. Jeg har lavet denne:
If FileUploadEBLD.PostedFile.ContentLength > 7000000 Then lblInfoFiles.Text = "File is too big" Exit Sub End If
Sagen er den, at hvis den vedhæftede fil er mindre end angivet i web.config, så løber den fint igennem koden, men går selvfølgelig ikke ind i if-sætningen. Men hvis den vedhæftede fil er større end angivet i web.config, så gennemløber den slet ikke denne kode, men går ned uden videre.
Hvis den vedhæftede fil er for stor, så løber den kun igennem dette kode:
Protected Sub Page_Error(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Error Try
Catch ex As Exception
End Try End Sub
og her er gennemløbes Try - End Try - End Sub og næste step slukker programmet. Den går ikke engang igennem Catch og det synes jeg, er meget mærkeligt!
og den virker, har lige testet den igen - hvis filen er for stor, går den ind og sætter lblStatus.Visible = true....
Min kode: //Upload af billede, hvis der er et billede string billedenavn = "";
if (fuplBrugerBillede.HasFile == true) { //Hvis antal mb> 4 mb skal den fremkomme med en fejlbesked if (fuplBrugerBillede.PostedFile.ContentLength > 5000) { lblStatus.Visible = true; lblStatus.Text = "Filen er for stor til at uploade"; } else { //Laver en ny instans og finder filnavn FileInfo filInfo = new FileInfo(fuplBrugerBillede.FileName);
//Laver en streng med stien og navn filen der uploades skal gemmes som string destination = Page.MapPath("~/Upload/Bruger/") + lblBrugerId.Text + "\\" + filInfo.Name;
Det skal siges, da jeg knoklede rundt med det her, fik jeg også samme fejl som du - men da jeg tilrettede min webconfig, så den var større end det jeg spurgte på, fik jeg det til at fungere :-)
Jeg fatter det ikke! Nu har jeg lavet et testprogram uden at specificere noget i web.config. Når filstørrelsen er mindre end defaultstørrelsen går alt godt, men når den er større, så går alt i sort!! Kunne jeg få dig til at sende lige nøjagtigt, hvad du har stående i web.config ifm. maxRequestLength?
Du manglede at sætte <httpRuntime maxRequestLength="400000"/> ind i web.config......
Web.config for den solution du har sendt mig: <?xml version="1.0"?> <!-- Note: As an alternative to hand editing this file you can use the web admin tool to configure settings for your application. Use the Website->Asp.Net Configuration option in Visual Studio. A full list of settings and comments can be found in machine.config.comments usually located in \Windows\Microsoft.Net\Framework\v2.x\Config --> <configuration> <appSettings/> <connectionStrings/> <system.web> <!-- Set compilation debug="true" to insert debugging symbols into the compiled page. Because this affects performance, set this value to true only during development.
Visual Basic options: Set strict="true" to disallow all data type conversions where data loss can occur. Set explicit="true" to force declaration of all variables. --> <compilation debug="true" strict="false" explicit="true"/> <pages> <namespaces> <clear/> <add namespace="System"/> <add namespace="System.Collections"/> <add namespace="System.Collections.Specialized"/> <add namespace="System.Configuration"/> <add namespace="System.Text"/> <add namespace="System.Text.RegularExpressions"/> <add namespace="System.Web"/> <add namespace="System.Web.Caching"/> <add namespace="System.Web.SessionState"/> <add namespace="System.Web.Security"/> <add namespace="System.Web.Profile"/> <add namespace="System.Web.UI"/> <add namespace="System.Web.UI.WebControls"/> <add namespace="System.Web.UI.WebControls.WebParts"/> <add namespace="System.Web.UI.HtmlControls"/> </namespaces> </pages> <!-- The <authentication> section enables configuration of the security authentication mode used by ASP.NET to identify an incoming user. --> <authentication mode="Windows"/> <!-- The <customErrors> section enables configuration of what to do if/when an unhandled error occurs during the execution of a request. Specifically, it enables developers to configure html error pages to be displayed in place of a error stack trace.
som du kan se - er den eneste ændring neders, hvor jeg har sat <httpRuntime maxRequestLength="100000"/> ind....og uploader jeg nu en fil, der er større end 7mb får jeg din fejlbesked frem og ikke den almindelige fejlside......som vi begge er enige om, ikke kan bruges til noget....
Ikke helt for jeg kan stadig ikke få det til at virke. I dit eksempel har du en max. grænse på 100 MB som jeg læser antallet af nuller og det er kun i tilfældet at man uploader en fil STØRRE end max. grænsen, at jeg får fejlen.
Fejlbesked vil derfor gives og fanges med filstørrelser mellem 7 MB og een byte mendre end 100 MB.
På samme måde hvis man bruger defaultværdien ca. 4 MB - op til 4 MB ingen problemer, men filer større end 4 MB giver den grimme fejl.
Jeg bruger de filer du har sendt til mig - med den rettelse, som jeg har vist her - og uploader en fil på 8255kb og får den fejlbesked du har sat ind - nemlig:
File is too big
1) Du skal sørge for at i din web.config at filstørrelsen er større end det du max vil tillade........altså om det er 100 eller 1000 mb er fuldstændig ligegyldigt... 2) det er så i din kode, du bestemmer, hvor meget du vil tillade - har du sat den i web.config til 100mb skal du sætte den til mindre altså =< 99 mb......
I det eksempel du har sendt til mig, har du i din fil sat den til: 7000000 som så er ca. 7 mb....... det vil sige - alt under ca 7 mb (og ja jeg er forfærdelig til at regne de der tal ud - jeg afrunder groft) vil gå igennem - alt over 7 mb og til de 100 mb, vil gå godt (= korrekt fejlmeddelelse)
Jeg har lige testet ved at uploade en 17 mb fil - den får også fejlmeddelelsen......
Jeg tror det er din forståelse for <httpRuntime maxRequestLength="8000" /> i web.config den er galt med - du tester IKKE her om den er større og så skal fremkomme med fejlmeddelelse - det eneste (groft sagt) den gør, er at fortælle, hvor meget du vil tillade den kan uploade uden den grimme side fremkommer....
Der hvor du tester, er i din vb fil - altså
If FileUpload1.PostedFile.ContentLength > 7000000
Der skal du så huske den skal sættes til et mindre tal end det du har i web.config'en
Ok - nu har jeg lavet en helt frisk side til test.
web.config: <httpRuntime maxRequestLength="8000"/> Altså 8 MB
Koden til siden ser sådan ud:
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click Dim path As String = Server.MapPath("~/UploadedImages/")
If FileUpload1.PostedFile.ContentLength > 2000000 Then Label1.Text = "File too big" Exit Sub Else Try FileUpload1.PostedFile.SaveAs(path & _ FileUpload1.FileName) Label1.Text = "File uploaded!" Catch ex As Exception Label1.Text = Err.Description End Try End If
End Sub
Altså 2 MB og dermed meget sikker 'afstand' til de 8 MB.
Jeg uploader herefter 3 filer med følgende størrelser:
1/ 44 KB - upload foretages med meldingen File uploaded!
2/ 2546 KB - altså ca. 2,5 MB. Upload foretages ikke og beskeden File too big fås. Dette er en fil, der i størrelse ligger mellem 2 MB og 8 MB.
3/ 9426 KB - altså over grænse i kode og web.config. Det er så her, at det går galt. FileUpload1.PostedFile.ContentLength fanger ikke denne situation og skærmen går i gul.
Du fortæller i web.config hvor højt du vil teste op til......... Så hvis du vil at den skal teste f.eks. til 100 mb så sætter du 100mb ind i web.config...... At du så ikke tillader 100mb men kun 2mb (i selve din vb kode) er jo så en anden sag :-)
Ok - jeg kunne bare godt lide, at brugeren ikke får en gul skærm, hvis han/hun kommer til at uploade en for stor fil! Men ellers tak for sin tålmodighed!!
Nu aner jeg ikke hvad det er de skal uploade - MEN hvis du sætter den til 100mb - så er det nok ulovlige ting, de vil uploade......og så er jeg personligt ligeglad med om de får en gul skærm........ Du fanger jo dem, der bare forsøger at uploade f.eks. et billede, der er for stort - ved din fejlmelding så :-)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.