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 😉
Hallo CShark2,
~~WebForms? Oder MVC? In MVC kommen Dateien als HttpPostedFile an die ein "FileName"-Property haben.
Gruss
Coffeebean
EDIT: Ach, Blödsinn. Vergiss meine Antwort. Sie ist zwar nicht falsch, aber passt absolut nicht. Sorry.
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Redest Du von ASP.NET WebForms oder ASP.NET MVC?
HTML bietet kein Upload mehrerer Dateien. Dazu musst Du Plugins auf Basis von AJAX oder Flash/Java nutzen.
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
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!
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 imvalue
-Attribut desInput
-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
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! 🙂