Laden...

[erledigt][ASP.NET] FileUpload Nur den Dateinamen ermitteln

Erstellt von CShark2 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.482 Views
C
CShark2 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren
[erledigt][ASP.NET] FileUpload Nur den Dateinamen ermitteln

Guten Tag an alle 😃

Zurzeit setzte ich einen ASP.Net WEbservice + Website um und dabei bin ich auf ein Problem gestoßen.

In einer Oberfläche soll der User eine oder mehrere Datei(en) auswählen können.
Aus diesen Dateien wird dann eine Tabelle erstellt in der die Namen der Dateien und andere Informationen, die der User vorher eingeben kann, angezeigt werden sollen.
Für die Anzeige benötige ich nur den Namen der jeweiligen Datei.
Alle ausgewählten Dateien werden dann durch den Klick auf den Button Datensatz hinzufügen in die unten stehende Tabelle "geladen".

Soweit so gut. Das funktioniert auch über ein FileUpload Control.
Jetzt gibt es nur ein Problem:
Wenn der User mehrere Dateien auswählt (die Teilweise auch sehr groß sein können) und dann auf den Button Datensatz hinzufügen geklickt wird bekommt man die Nachricht das die Verbindung zum Server während des Ladens zurückgesetzt wurde.

Meine Frage ist jetzt, ob es die Möglichkeit nur den Namen der Datei zu ermitteln ohne das die Datei geöffnet oder ausgelesen wird?

Vielleicht habe ich ja auch einen ganz großen Denkfehler und das ganze ist anders besser umzusetzen.

Vielen Dank schon mal für die Hilfe 😉

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo CShark2,

~~WebForms? Oder MVC? In MVC kommen Dateien als HttpPostedFile an die ein "FileName"-Property haben.

HttpPostedFile Class~~

Gruss

Coffeebean

EDIT: Ach, Blödsinn. Vergiss meine Antwort. Sie ist zwar nicht falsch, aber passt absolut nicht. Sorry.

16.833 Beiträge seit 2008
vor 10 Jahren
  1. Redest Du von ASP.NET WebForms oder ASP.NET MVC?

  2. HTML bietet kein Upload mehrerer Dateien. Dazu musst Du Plugins auf Basis von AJAX oder Flash/Java nutzen.

  3. Wenn Du eine Form absendest, die eine Datei als multipart in einer Form definiert, dann will HTML diese auch hochladen.
    Vermutlich verwendest Du WebForms und willst über den Server die Tabelle erstellen; im Prinzip also dynamisch gmäßg einer RIA interaktiv die Tabelle aktualisieren.

Vorweg: dafür ist WebForms nicht gemacht.
MVC wäre die korrekte Technologie für RIAs.

Lösung: ohne die Datei hochzuladen und dem Server bekannt zu machen bleibt Dir nur Javascript. So würde man das auch bei MVC machen.
Der Dateiname ist hierbei im value-Attribut des Input-Felds.

C
CShark2 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

Erstmal vielen Dank für die schnelle Antwort 🙂

Ich nutze ASP.NET WebForms.
Leider muss ich das machen, da mir nur ein älterer IIS-Server zur Verfügung steht 😠

Ich werde das ganze mit Javascript mal ausprobieren und dann eine Rückmeldung geben.

An javascript hatte ich noch gar nicht gedacht... arbeite grad aber auch unter erschwärten Bedingungen... die Kaffemaschine ist kaputt 🙄

Nochmals vielen Dank!

5.941 Beiträge seit 2005
vor 10 Jahren

Hallo CShark2

Es gibt da eine Lösung.
Der Mimetyp muss

Beim serverseitigen FileUpload Control oder einem <input type="file" [...] dass serverseitig läuft, fügt ASP.NET automatisch das "enctype" Attribut mit dem Wert "multipart/form-data" zum Formular hinzu.

Hinweis:
Im "enctype" Attribut wird der Mimetyp mit dem das Formular versendet wird, festgelegt.
Standardmässig steht diese Attribute auf "application/x-www-form-urlencoded", wenn man allerdings per POST einen Dateiupload ermöglichen will, muss der Wert auf "multipart/form-data" stehen.

Wenn dieses Attribut gesetzt ist, werden die Dateien übertragen, und genau das wollen wir in diesem Fall nicht.
Ist dieses Attribut (wie standardmässig), nicht gesetzt, wird anstelle der Datei und des Dateipfades, nur der Dateipfad per POST gesendet.

Erreichen können wir das mit einem normalen <input type="file" [...] Tag, das nicht serverseitig deklariert ist.
Man muss noch darauf achten, dass man hier das "name" Attribut zur Identifizierung benutzt, weil das anschliessende Request.Form[] auf dieses zugreift.

Lösung: ohne die Datei hochzuladen und dem Server bekannt zu machen bleibt Dir nur Javascript. So würde man das auch bei MVC machen.
Der Dateiname ist hierbei im value-Attribut des Input-Felds.

Beschriebenes geht sicher auch über ASP.NET MVC, ist ja alles nativ.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

C
CShark2 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

Meine Rückmeldung kommt zwar spät, aber ich habe es jetzt mit javascript umgesetzt.
Anfangs hatte ich immernoch das Problem mit der zurückgestezten Verbindung, aber nur weil ich den Value des <input type="file" /> nicht zurückgesetzt hatte.

    <script type="text/javascript">
        function getFileName() {
            var varfile = document.getElementById("filepath");
            document.getElementById('<%=filename.ClientID%>').value = varfile.value;
            document.getElementById("filepath").value = "";
        }
    </script>
                            <input type="file" id="filepath" name="filepath" onchange="getFileName();"/>
                            <input type="text" id="filename" runat="server" />

Mit dem Code funktioniert da ganze jetzt. 👍
Ich bekomme wie gewünscht den Dateipfad ohne die Meldung.

Noch einmal vielen Danke an alle und erfolgreiches Coden! 🙂