Was unter ASP eines der TOP 10 Themen in der Entwicklergemeinde war, funktioniert mit der ASP+ Version ganz easy ohne zusätzliche Komponenten.
File Upload war nur bisher mit Tools möglich, obwohl HTTP 1.1 die entsprechende Funktion bereits im Protokoll enthält. Wie so oft wird mit ASPX alles einfacher.
Dafür verwenden Sie das INPUT HTML Server Control und setzen den Typ auf FILE.
<input id="Upload1" type=file runat="server"> |
Natürlich muss auch eine Funktion ausgeführt werden. Dies erledigen wir mit dem guten alten Button.
<input type=button id="cmdUpload" value="Upload" OnServerClick="cmdUploadClick" runat="server"> |
Wichtig ist, das im Form Tag der EnCoding Type mit angegeben wird.
<form enctype="multipart/form-data" runat="server"> |
Damit ermöglichen Sie einen Multipart Mime Upload.
Soweit alles klar. Jetzt muss noch die Datei am Server gespeichert werden. Dies kann komfortabel mit einem Einzeiler erledigt werden.
Upload1.PostedFile.SaveAs("c:\temp\myfile.txt") |
Natürlich wird man in der Praxis den Pfad zum speichern der Datei dynamisch erzeugen. So könnte jeder "Uploader" sein eigenes Verzeichnis bekommen. Normalerweise würde Upload1.Value den Dateinamen der Quelldatei samt Pfad liefern. Tut es aber nicht. Um den Dateinamen zu extrahieren verwenden Sie:
upload1.postedfile.Filename |
In dem Objekt Postefile verstecken sich auch noch andere nutzliche Funktionen wie Contentlength um die Dateigrösse zu ermitteln.
Vergessen Sie nie, das für das Zielverzeichnis (saveas) der komplette Pfad am Webserver verwendet werden muss. Um z.B. in ein Directory Upload innerhalb des aktuellen Webs zu schreiben setzen Sie den Pfad wie folgt zusammen.
Upload1.PostedFile.SaveAs(Server.Mappath(".")+"\upload\"+Datei) |
Im Gegensatz zu asp müssen Sie nicht daraug achten, das sowohl beim Filesystem als auch beim IIS Schreibrechte für den User und das Zielverzeichnis gegeben sein müssen. Die macht das Framework von alleine.