Zum Inhalt springen

ASP.NET-Input streikt bei großen Dateien im IE10


Owly

Empfohlene Beiträge

Hallo,

Ich habe hier eine ASP.NET-Anwendung (C#) mit einem File-Input-Dialog (oder File-Upload). Dabei wird aber gar nicht die Datei hochgeladen, sondern nur der Dateipfad wird bei einem Buttonklick in einer Datenbank gespeichert.

Bisher hat das auch wunderbar funktioniert.

Jetzt ist aber ein Fall aufgetreten, bei dem es nicht geht, und zwar bei größeren Dateien (offenbar größer als 4GB), wenn man IE10 benutzt. Dann tritt folgender Fehler auf: "Arithmetic result exceeded 32 bits." Ist damit wohl die Dateigröße gemeint (etwa 4,10GB, die genaue Zahl hat in binär umgewandelt 33 bit)?

Ich habe bereits versucht, in der web.config unter httpRuntime die maximale Größe zu erweitern (maxRequestLength und executionTimeout vergrößert), aber das hat nichts gebracht.

Kann mir jemand einen Tipp geben, wie ich dieses Problem lösen kann? Vielleicht kennt ihr auch eine Alternative zum File-Upload, da ich ja wie gesagt nur den Pfad brauche und nicht die ganze Datei.

Viele Grüße

Owly

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, ich habe es mal auf den relevanten Code reduziert:


<body>

    <form id="form1" runat="server">

    <div>

        <asp:DetailsView ID="DtlsVw_Insert" runat="server" AutoGenerateRows="False" DataKeyNames="Index_Nr"  DefaultMode="Insert"

                    HeaderText="Add Image" Height="50px" OnItemInserting="detailsViewInserting"

                    Width="407px">

            <Fields>

                <asp:TemplateField HeaderText="img path" SortExpression="img_path">

                    <InsertItemTemplate>

                        <input name="filePath" type="file" id="File1"/>

                    </InsertItemTemplate>

                </asp:TemplateField>

                <asp:TemplateField ShowHeader="False">

                        <InsertItemTemplate>

                            <asp:LinkButton ID="LnkBtn_Ok_insert" runat="server" CausesValidation="True" CommandName="Insert"

                                Text="Ok"></asp:LinkButton>

                        </InsertItemTemplate>

                </asp:TemplateField>

            </Fields>

        </asp:DetailsView>

    </div>

    </form>

</body>

namespace WebApplication

{

    public partial class _Default : System.Web.UI.Page

    {

        protected void Page_Load(object sender, EventArgs e)

        {

        }

        protected void detailsViewInserting(object sender, DetailsViewInsertEventArgs e)

        {

            // get img_Path

            Session["imgPath"] = Request.Form["filePath"];

        }

    }

}

Mit "Image" sind hier übrigens keine Bilder gemeint, sondern Images von Datenträgern, die später automatisiert aufgespielt werden sollen. Darum sind auch die Dateien so groß.

Bearbeitet von Owly
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmmmm,

hier sehe ich kein File-Down/Upload.

Allerdings: Was hindert Dich daran, nur den Feldinhalt nach der Selektion zu lesen und diese dann irgendwo zu speichern?

Ich vermute mal dass der Down/Upload per Button angestoßen wird, oder wie machst Du das?

Wenn dem so sein sollte, dürfte es kein Problem sein, anstatt dem Down/Upload etwas anderes ausführen zu lassen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Entschuldige, ich hatte etwas vergessen. Ich habe den Code jetzt ergänzt.

Natürlich wird der "Upload" per Button angestoßen.

Aber statt des Uploads greife ich ja tatsächlich nur den Pfad ab. Und trotzdem funktioniert es nicht, wenn die Datei zu groß ist.

Bearbeitet von Owly
Link zu diesem Kommentar
Auf anderen Seiten teilen

Also noch einmal ;)

Die Methode die beim Klicken auf den Button Upload aufgerufen wird muss dann so modifiziert werden, dass A. der Upload nicht gemacht wird, B. die Aktion ausgeführt wird, wie von Dir gewünscht ist.

Fertig ;)

P.S. Ich habe zwar keinerlei Erfahrung mit ASP, aber ich stütze mich auf Logik.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber genau so mache ich es doch! Darum habe ich das Wort "Upload" extra noch in Anführungszeichen gesetzt, vielleicht hast du das nicht mehr gesehen.

Beim Klick auf "Ok" wird nur diese Zeile ausgeführt:

Session["imgPath"] = Request.Form["filePath"];

Die Datei wird nicht hochgeladen.

Anschließend werden natürlich noch alle Daten in der Datenbank gespeichert, aber der Fehler tritt bereits hier auf.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Doch, wenn man es ihm erlaubt.

Ich weiß, dass es zumindest im Internet Explorer 10 geht. Die Option in den Internet Options heißt "Include local directory path when uploading files to a server".

Bis Version 8 ging es wohl auch noch ohne. Das Problem hatte ich nämlich auch schon, dass sich jemand meldete, warum auf einmal nur noch der Dateiname gespeichert wird und nicht der Pfad.

Es geht hier auch nicht um lokale Dateien, sondern um solche die auf dem Server liegen. Da gibt es keine Bedenken.

Bearbeitet von Owly
Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...