[gelöst]Http request: maximum length exceeded.



  • Hey,

    Ich bin gerade dabei den Fileupload für den suer freundlicher zu gestalten.
    Was heissen soll das keine exception bei zu grossen uploads geworfen werden soll die der user nicht versteht.

    Mit ein bisschen googeln habe ich auch eine ganz passable Lösung gefunden:

    protected override void OnError(EventArgs e)
    {
    // At this point we have information about the error
    HttpContext ctx = HttpContext.Current;

    Exception exception = ctx.Server.GetLastError();
    string test = exception.ToString();
    if (exception.Message == "Maximum request length exceeded.")
    {

    string errorInfo =
    "<br>Message: " + exception.Message +
    "Die grösse der datei darf maximal xxx sein";
    ctx.Response.Write(errorInfo);

    // --------------------------------------------------
    // To let the page finish running we clear the error
    // --------------------------------------------------
    ctx.Server.ClearError();
    }

    base.OnError(e);
    }

    Das ding ist jetzt nur das ich das ganze eigentlich lieber im javascript bevor der Fehler auftritt überprüfen wollen würde.

    Also das ich beim onButtonClick in mein javascript rein komme, dort überprüfe ob diese exception auftreten würde falls das form mit diesem file abgeschickt wird.
    Ist das möglich?

    Oder gibt es keinen anderen weg wie die OnError methode zu überschreiben?
    Achja, hätte da ausserdem zur OnError überschreibung noch 2 Fragen.

    1. Sehe ich es richtig das so wie ich das gemacht habe alle sonstigen Fehler sich so verhalten wie das in der standard OnError methode wäre?
    2. Solang ich diese methode nur im FileUploader code überschreibe wird sosnt überall die standard onError benutzt.

    Cheers,
    JCarlson



  • Also, nach dem darauf jetzt niemand einen JS vorschlag bringen konnte habe ich das mit OnError überschreiben beibehalten.
    Das ganze sieht jetzt so aus:

    protected override void OnError(EventArgs e)
    {
    //We define the exception: "request length exceeded" the errorcode therefor is 0x80004005.
    int requestLengthErrorCode = int.Parse("80004005", NumberStyles.AllowHexSpecifier);

    // At this point we have information about the error
    HttpContext ctx = HttpContext.Current;

    Exception exception = ctx.Server.GetLastError();
    System.Web.HttpException httpException = (HttpException)exception;

    //We only wanna handle the request length exception, otherwise the normal OnError method should run.
    if (httpException.ErrorCode == requestLengthErrorCode)
    {
    //get the max request legth, which is set in the config file and calculate it to MB which is more user friendly.
    HttpRuntimeSection httpRuntime = (HttpRuntimeSection)System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime");
    int maxFileSizeHexa = httpRuntime.MaxRequestLength;
    int decimalSizeAsInt = Convert.ToInt32(maxFileSizeHexa.ToString(), 16);
    string decimalSize = String.Format("{0:X}", decimalSizeAsInt);
    double doubleSize = Convert.ToDouble(decimalSize);
    double MBSize = doubleSize / 1024;

    StringBuilder script = new StringBuilder();
    script.Append("<script language=\"javascript\">" + Environment.NewLine);
    script.AppendLine(String.Format("alert('{0}');", String.Format(GetTextForJS("FileToBig"), Math.Round(MBSize, 2))));
    script.Append("parent.location.reload();" + Environment.NewLine);
    script.Append("</script>" + Environment.NewLine);
    this.Page.ClientScript.RegisterStartupScript(typeof(Page), "RefreshScript", script.ToString());

    ctx.Response.Output.Write(script);

    // --------------------------------------------------
    // To let the page finish running we clear the error
    // --------------------------------------------------
    ctx.Server.ClearError();
    }

    base.OnError(e);
    }

    Das Ding ist nur an dieser Stelle hier:

    HttpRuntimeSection httpRuntime = (HttpRuntimeSection)System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime");

    hole ich mir den Wert der die maximale file grösse angibt, allerdings steht dort für IIS 7 nutzer etwas anderes.

    Kann mir vllt. jemand sagen wie ich überprüfen kann ob IIS 7, oder einer drunter genutzt wird, und anhand davon die file grösse holen?



  • Für alle dies intressiert, hier die Lösung um die IIS 7 exception zu umgehen:

    http://de.w3support.net/index.php?db=so&id=567273



  • JCarlson schrieb:

    Ich bin gerade dabei den Fileupload für den suer freundlicher zu gestalten.

    Wie verhinderst du, dass ungeduldige Anwender größere Uploads nicht versehentlich abbrechen? Visualisierst du den Uploadvorgang?

    Wäre ein (Silverlight-) Plugin mit Forschrittsanzeige und Abbruchmöglichkeit nicht sinnvoller und deutlich (Anwender-) freundlicher?



  • Bei der user Freundlichkeit in diesem Post ging es mir eigentlich nur darum das ein user ein maximum für die files welche hochgeladen werden können setzen kann, ohne eine hässliche exception zu bekommen.

    Und um auf deine Frage zurück zu kommen.

    Während dem upload zeigen wir ein gif, damit der user weiss das die Datei am hochladen ist.

    Da unsere Kunden eigentlich eher kleinere Dateien hochladen reichts dies für uns vollkommen aus.

    Somit kann ich dir leider auch nicht sagen wie du soetwas umsetzen kannst(falls du überhaupt auf hilfe stellung hinaus wolltest 😉 ).


Anmelden zum Antworten