Dateipfad ohne Upload der Datei auslesen
Es gibt Leute, die haben Anforderungen, dann gibt es aber auch noch Leute die haben spezielle Anforderungen ;-)
Wenn man den Benutzern seiner Webseite die Möglichkeit eröffnen möchte, lokal Dateien auszuwählen, um die Pfade dann in der Webanwendung zu speichern / nutzen, kann man nicht einfach auf <asp:FileUpload [...] zurückgreifen, hier müssen alte Mittel herhalten. Wie Bernd schon schön gesagt hat, "back to the roots" :-)
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.
Der ASPX Teil kann ungefähr so aussehen:
<input type="file" name="filePath" />
<asp:Button ID="btnSubmit" Text="PostBack..." runat="server" />
Und im Codebehind Teil kann der Wert per Request.Form[] abgerufen und anschliessend benutzt werden:
'// Beispiel, Wert in ein Label schreiben
this.lblResult.Text = Request.Form["filePath"];
Weiterführende Links: