Anzeigen eine aussagekräftige Fehlermeldung beim hochladen von zu großen Datei

StackOverflow https://stackoverflow.com/questions/823968

  •  05-07-2019
  •  | 
  •  

Frage

Wir haben ein festes limit der Dateigröße der uploads auf unserer Website - unten die Größe der Standard-asp.net und iis festlegen.

Ich habe ein einfaches catch-setup in Application_BeginRequest, die Fänge diesem sind (es ist nicht excat da es prüft die ContentLength einschließlich aller anderen form Daten, aber es ist gut genug).Ich möchte entweder in die Verarbeitung fortsetzen der Seite, die der Benutzer versucht zu laden, oder als fallback-plan leiten Sie den Benutzer auf eine Seite, die erklärt, dass die Dateigröße zu groß ist (wir haben bereits einen Untertitel zu erklären, aber Sie wissen-Benutzer - "Sie brauchen nicht zu Lesen, keine stinkenden Untertitel").

Was ist also das problem?Nun, es scheint, dass meine Reaktion war bereits gesendet, um die Benutzer - 404 erklären, dass die Seite konnte nicht gefunden werden.Ich will nicht, dass dieses Verhalten, ich will zu Spülen diese Antwort, da es nicht die, die ich wollen, dass die Benutzer, um zu sehen, - möchte ich zeigen etwas anderes - bauen Sie meine eigene Antwort, umleiten oder nur verarbeiten die Seite, die Sie eigentlich bekommen sowieso.

Ich denke, das problem könnte immer noch in der IIS die Ablehnung des Antrags/post, da die Datei größer ist als das, was IIS will.Ich weiß wirklich Graben diese - eine verrückte Benutzer, der versucht, Sie zum hochladen einer 20meg Bild sollte nicht erlaubt werden, DoS IIS in die Knie zu zwingen, aber ist das alles?Oder bekomme ich eine chance abzufangen, diese Antwort an den Benutzer, anstatt die Erhöhung der maximalen Größe, die auf der IIS-und so verbringen die Bandbreite zum Empfang dieser Datei, ich möchte nur zu identifizieren, die diesen Beitrag als 'zu groß' und sendet eine entsprechende Antwort zurück an den Benutzer.

War es hilfreich?

Lösung

Ich hatte das gleiche problem und nach langem suchen scheint es keine perfekte Lösung dafür.Sie können ändern die Max-Request-Länge festlegen, an welcher Stelle IIS dienen wird, die ASP.Net Fehler.Sie fangen auch dieser Fehler auf global.asax und zeigen Sie dem Benutzer eine freindly-Fehler-Seite.

Weitere Informationen finden Sie auf dies zu tun hier http://www.developer.com/db/article.php/10920_3426051_2

Andere Tipps

Große Ressource!

habe ich den Link oben einen Haken auf Dateien zu implementieren, auf den Server hochgeladen werden, die zu groß waren und auf die Standardfehlerseite umgeleitet

web.config ->

    < customErrors mode="RemoteOnly" defaultRedirect="~/GenericError.htm" />

MyPage.aspx.cs ->

    protected void Page_Error(object sender, EventArgs e)
    {
        if (HttpContext.Current.Error is HttpException)
            if ((HttpContext.Current.Error as HttpException).ErrorCode == -2147467259)
            {
                Server.ClearError();
                Response.Redirect(@"~/FileSizeError.htm", false);
            }
    }

Die Antworten oben nicht für mich auf IIS nicht funktioniert 7.5. Wir kamen schließlich auf mit dem folgenden:

void Application_PreSendRequestHeaders(Object sender, EventArgs e)
{
    if (
        Request.Headers["Content-Length"] != null && 
        int.Parse(Request.Headers["Content-Length"]) > 150000000 &&
        Request.RawUrl.EndsWith("/Release/ProjectReleases.aspx?Mode=Create"))
    {
        try
        {
            Response.Redirect("http://anyurl", true);
        }
        catch (HttpException ex)
        {
            if (ex.Message == "Maximum request length exceeded.")
            {
                Server.ClearError();
                Response.ClearHeaders();
                Response.Redirect("http://www.edward-williams.com", true);
            }
        }
    }
}

Haben Sie nicht die maximale Upload-Größe zu ändern. Zugegeben actaully die Endfassung einen statischen Wert für die maximale Upload-Größe basierend auf dem Wert in der web.config gesetzt und auf eine benutzerdefinierte Fehlerseite vs dieser Homepage umgeleitet, aber Sie bekommen die Idee.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top