Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Tom FitzMacken
In diesem Artikel wird erläutert, wie Dateien auf einer ASP.NET Webseite (Razor) gelesen, geschrieben, angefügt, gelöscht und hochgeladen werden.
Hinweis
Wenn Sie Bilder hochladen und bearbeiten möchten (z. B. kippen oder verkleinern), lesen Sie das Arbeiten mit Bildern in einer ASP.NET-Website für Webseiten.
Was Sie lernen:
- Erstellen einer Textdatei und Schreiben von Daten in die Textdatei
- So fügen Sie Daten an eine vorhandene Datei an.
- So lesen Sie eine Datei und zeigen sie darin an.
- So löschen Sie Dateien von einer Website.
- So können Benutzer eine Datei oder mehrere Dateien hochladen.
Dies sind die ASP.NET Programmierfeatures, die im Artikel eingeführt wurden:
- Das
FileObjekt, das eine Möglichkeit zum Verwalten von Dateien bietet.- Der
FileUploadHilfsprogramm.- Das
PathObjekt, das Methoden bereitstellt, mit denen Sie Pfad- und Dateinamen bearbeiten können.Im Lernprogramm verwendete Softwareversionen
- ASP.NET Webseiten (Razor) 2
- WebMatrix 2
Dieses Lernprogramm funktioniert auch mit WebMatrix 3.
Erstellen einer Textdatei und Schreiben von Daten in die Textdatei
Neben der Verwendung einer Datenbank auf Ihrer Website können Sie auch mit Dateien arbeiten. Beispielsweise können Sie Textdateien als einfache Möglichkeit zum Speichern von Daten für die Website verwenden. (Eine Textdatei, die zum Speichern von Daten verwendet wird, wird manchmal als flache Datei bezeichnet.) Textdateien können in unterschiedlichen Formaten vorliegen, z. B. .txt, .xmloder .csv (durch Trennzeichen getrennte Werte).
Wenn Sie Daten in einer Textdatei speichern möchten, können Sie mit der File.WriteAllText Methode die zu erstellende Datei und die zu schreibenden Daten angeben. In diesem Verfahren erstellen Sie eine Seite, die ein einfaches Formular mit drei input Elementen (Vorname, Nachname und E-Mail-Adresse) und einer Schaltfläche " Absenden " enthält. Wenn der Benutzer das Formular sendet, speichern Sie die Eingabe des Benutzers in einer Textdatei.
Erstellen Sie einen neuen Ordner mit dem Namen App_Data, sofern er noch nicht vorhanden ist.
Erstellen Sie im Stammverzeichnis Ihrer Website eine neue Datei mit dem Namen UserData.cshtml.
Ersetzen Sie den vorhandenen Inhalt durch Folgendes:
@{ var result = ""; if (IsPost) { var firstName = Request["FirstName"]; var lastName = Request["LastName"]; var email = Request["Email"]; var userData = firstName + "," + lastName + "," + email + Environment.NewLine; var dataFile = Server.MapPath("~/App_Data/data.txt"); File.WriteAllText(@dataFile, userData); result = "Information saved."; } } <!DOCTYPE html> <html> <head> <title>Write Data to a File</title> </head> <body> <form id="form1" method="post"> <div> <table> <tr> <td>First Name:</td> <td><input id="FirstName" name="FirstName" type="text" /></td> </tr> <tr> <td>Last Name:</td> <td><input id="LastName" name="LastName" type="text" /></td> </tr> <tr> <td>Email:</td> <td><input id="Email" name="Email" type="text" /></td> </tr> <tr> <td></td> <td><input type="submit" value="Submit"/></td> </tr> </table> </div> <div> @if(result != ""){ <p>Result: @result</p> } </div> </form> </body> </html>Das HTML-Markup erstellt das Formular mit den drei Textfeldern. Im Code verwenden Sie die
IsPostEigenschaft, um zu bestimmen, ob die Seite übermittelt wurde, bevor Sie mit der Verarbeitung beginnen.Die erste Aufgabe besteht darin, die Benutzereingabe abzurufen und sie Variablen zuzuweisen. Der Code verkettet dann die Werte der separaten Variablen in einer durch Trennzeichen getrennten Zeichenfolge, die dann in einer anderen Variablen gespeichert wird. Beachten Sie, dass das Kommatrennzeichen eine Zeichenfolge ist, die in Anführungszeichen (",") enthalten ist, da Sie ein Komma buchstäblich in die große Zeichenfolge einbetten, die Sie erstellen. Am Ende der Daten, die Sie verketten, fügen Sie hinzu
Environment.NewLine. Dadurch wird ein Zeilenumbruch (ein Zeilenumbruchzeichen) hinzugefügt. Was Sie mit all dieser Verkettung erstellen, ist eine Zeichenfolge, die wie folgt aussieht:David,Jones,davidj@contoso.com(Mit einem unsichtbaren Zeilenumbruch am Ende.)
Anschließend erstellen Sie eine Variable (
dataFile), die den Speicherort und den Namen der Datei enthält, in der die Daten gespeichert werden sollen. Das Festlegen der Position erfordert eine spezielle Behandlung. In Websites ist es eine schlechte Praxis, im Code auf absolute Pfade wie C:\Folder\File.txt für Dateien auf dem Webserver zu verweisen. Wenn eine Website verschoben wird, ist ein absoluter Pfad falsch. Darüber hinaus wissen Sie für eine gehostete Website (im Gegensatz zu Ihrem eigenen Computer) normalerweise nicht einmal, was der richtige Pfad ist, wenn Sie den Code schreiben.Manchmal (z. B. zum Schreiben einer Datei) benötigen Sie jedoch einen vollständigen Pfad. Die Lösung besteht darin, die
MapPathMethode desServerObjekts zu verwenden. Dadurch wird der vollständige Pfad zu Ihrer Website zurückgegeben. Um den Pfad für den Websitestamm abzurufen, verwenden Sie den~Operator (um den virtuellen Stamm der Website darzustellen) mitMapPath. (Sie können auch einen Unterordnernamen an ihn übergeben, z. B. ~/App_Data/, um den Pfad für diesen Unterordner abzurufen.) Anschließend können Sie zusätzliche Informationen zu den zurückgegebenen Methoden verketten, um einen vollständigen Pfad zu erstellen. In diesem Beispiel fügen Sie einen Dateinamen hinzu. (Weitere Informationen zum Arbeiten mit Datei- und Ordnerpfaden finden Sie in der Einführung in ASP.NET Web Pages Programming Using the Razor Syntax.)Die Datei wird im ordner App_Data gespeichert. Dieser Ordner ist ein spezieller Ordner in ASP.NET, der zum Speichern von Datendateien verwendet wird, wie in "Einführung in die Arbeit mit einer Datenbank" in ASP.NET Webseitenwebsites beschrieben.
Die
WriteAllTextMethode desFileObjekts schreibt die Daten in die Datei. Diese Methode verwendet zwei Parameter: den Namen (mit Pfad) der zu schreibenden Datei und die tatsächlich zu schreibenden Daten. Beachten Sie, dass der Name des ersten Parameters ein@Zeichen als Präfix aufweist. Dadurch wird ASP.NET mitgeteilt, dass Sie einen wortwörtlichen String angeben und dass Zeichen wie "/" nicht auf besondere Weise interpretiert werden sollten. (Weitere Informationen finden Sie in der Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax.)Hinweis
Damit Ihr Code Dateien im ordner App_Data speichern kann, benötigt die Anwendung Lese-/Schreibberechtigungen für diesen Ordner. Auf Ihrem Entwicklungscomputer ist dies in der Regel kein Problem. Wenn Sie Ihre Website jedoch auf dem Webserver eines Hostinganbieters veröffentlichen, müssen Sie diese Berechtigungen möglicherweise explizit festlegen. Wenn Sie diesen Code auf dem Server eines Hostinganbieters ausführen und Fehler erhalten, wenden Sie sich an den Hostinganbieter, um herauszufinden, wie diese Berechtigungen festgelegt werden.
Führen Sie die Seite in einem Browser aus.
Geben Sie Werte in die Felder ein, und klicken Sie dann auf 'Absenden'.
Schließen Sie den Browser.
Kehren Sie zum Projekt zurück, und aktualisieren Sie die Ansicht.
Öffnen Sie die data.txt. Die daten, die Sie im Formular übermittelt haben, befinden sich in der Datei.
Schließen Sie die data.txt Datei.
Anfügen von Daten an eine vorhandene Datei
Im vorherigen Beispiel haben WriteAllText Sie eine Textdatei erstellt, die nur eine Datenmenge enthält. Wenn Sie die Methode erneut aufrufen und denselben Dateinamen übergeben, wird die vorhandene Datei vollständig überschrieben. Nachdem Sie jedoch eine Datei erstellt haben, möchten Sie am Ende der Datei häufig neue Daten hinzufügen. Dazu können Sie die AppendAllText Methode des File Objekts verwenden.
Erstellen Sie auf der Website eine Kopie der Datei UserData.cshtml , und nennen Sie die Kopie UserDataMultiple.cshtml.
Ersetzen Sie den Codeblock vor dem öffnenden
<!DOCTYPE html>Tag durch den folgenden Codeblock:@{ var result = ""; if (IsPost) { var firstName = Request["FirstName"]; var lastName = Request["LastName"]; var email = Request["Email"]; var userData = firstName + "," + lastName + "," + email + Environment.NewLine; var dataFile = Server.MapPath("~/App_Data/data.txt"); File.AppendAllText (@dataFile, userData); result = "Information saved."; } }Dieser Code hat eine Änderung darin aus dem vorherigen Beispiel. Anstelle der Verwendung von
WriteAllTextwird die Methodethe AppendAllTextgenutzt. Die Methoden sind ähnlich, mit der Ausnahme, dassAppendAllTextdie Daten am Ende der Datei hinzufügt. Wie beiWriteAllText,AppendAllTexterstellt die Datei, wenn sie noch nicht vorhanden ist.Führen Sie die Seite in einem Browser aus.
Geben Sie Werte für die Felder ein, und klicken Sie dann auf 'Absenden'.
Fügen Sie weitere Daten hinzu, und senden Sie das Formular erneut.
Kehren Sie zu Ihrem Projekt zurück, klicken Sie mit der rechten Maustaste auf den Projektordner, und klicken Sie dann auf "Aktualisieren".
Öffnen Sie die data.txt. Sie enthält nun die neuen Daten, die Sie gerade eingegeben haben.
Lesen und Anzeigen von Daten aus einer Datei
Auch wenn Sie keine Daten in eine Textdatei schreiben müssen, müssen Sie wahrscheinlich manchmal Daten aus einer Datei lesen. Dazu können Sie das File Objekt erneut verwenden. Sie können das File Objekt verwenden, um jede Zeile einzeln zu lesen (getrennt durch Zeilenumbrüche) oder um einzelne Elemente zu lesen, unabhängig davon, wie sie voneinander getrennt sind.
In diesem Verfahren wird gezeigt, wie Sie die Daten lesen und anzeigen, die Sie im vorherigen Beispiel erstellt haben.
Erstellen Sie auf der Stammebene Ihrer Website eine neue Datei mit dem Namen DisplayData.cshtml.
Ersetzen Sie den vorhandenen Inhalt durch Folgendes:
@{ var result = ""; Array userData = null; char[] delimiterChar = {','}; var dataFile = Server.MapPath("~/App_Data/data.txt"); if (File.Exists(dataFile)) { userData = File.ReadAllLines(dataFile); if (userData == null) { // Empty file. result = "The file is empty."; } } else { // File does not exist. result = "The file does not exist."; } } <!DOCTYPE html> <html> <head> <title>Reading Data from a File</title> </head> <body> <div> <h1>Reading Data from a File</h1> @result @if (result == "") { <ol> @foreach (string dataLine in userData) { <li> User <ul> @foreach (string dataItem in dataLine.Split(delimiterChar)) { <li>@dataItem</li > } </ul> </li> } </ol> } </div> </body> </html>Der Code liest zunächst die Datei, die Sie im vorherigen Beispiel erstellt haben, in eine Variable mit dem Namen
userData" mit diesem Methodenaufruf:File.ReadAllLines(dataFile)Der Code dazu befindet sich in einer
ifAnweisung. Wenn Sie eine Datei lesen möchten, empfiehlt es sich, dieFile.ExistsMethode zu verwenden, um zuerst zu ermitteln, ob die Datei verfügbar ist. Der Code überprüft außerdem, ob die Datei leer ist.Der Seiteninhalt enthält zwei
foreachSchleifen, von denen eine in der anderen geschachtelt ist. Die äußereforeachSchleife ruft jeweils eine Zeile aus der Datendatei ab. In diesem Fall werden die Zeilen durch Zeilenumbrüche in der Datei definiert, d. h. jedes Datenelement befindet sich in einer eigenen Zeile. Die äußere Schleife erstellt ein neues Element (<li>Element) innerhalb einer sortierten Liste (<ol>Element).Die innere Schleife teilt jede Datenzeile in Elemente (Felder) mit einem Komma als Trennzeichen auf. (Basierend auf dem vorherigen Beispiel bedeutet dies, dass jede Zeile drei Felder enthält– den Vornamen, den Nachnamen und die E-Mail-Adresse, die jeweils durch ein Komma getrennt sind.) Die innere Schleife erstellt auch eine
<ul>Liste und zeigt ein Listenelement für jedes Feld in der Datenzeile an.Der Code veranschaulicht die Verwendung von zwei Datentypen, einem Array und dem
charDatentyp. Das Array ist erforderlich, da dieFile.ReadAllLinesMethode Daten als Array zurückgibt. DercharDatentyp ist erforderlich, da dieSplitMethode einarrayzurückgibt, in dem jedes Element vom Typcharist. (Informationen zu Arrays finden Sie in der Einführung in ASP.NET Webprogrammierung mithilfe der Razor-Syntax.)Führen Sie die Seite in einem Browser aus. Die Daten, die Sie für die vorherigen Beispiele eingegeben haben, werden angezeigt.
Tipp
Anzeigen von Daten aus einer Microsoft Excel-Datei, die durch Kommas getrennt ist
Sie können Microsoft Excel verwenden, um die in einer Kalkulationstabelle enthaltenen Daten als durch Trennzeichen getrennte Datei (.csv Datei) zu speichern. Wenn Sie dies tun, wird die Datei im Nur-Text-Format und nicht im Excel-Format gespeichert. Jede Zeile in der Kalkulationstabelle wird durch einen Zeilenumbruch in der Textdatei getrennt, und jedes Datenelement wird durch ein Komma getrennt. Sie können den im vorherigen Beispiel gezeigten Code verwenden, um eine durch Trennzeichen getrennte Excel-Datei zu lesen, indem Sie den Namen der Datendatei in Ihrem Code ändern.
Löschen von Dateien
Um Dateien von Ihrer Website zu löschen, können Sie die File.Delete Methode verwenden. Dieses Verfahren zeigt, wie Benutzer ein Bild (.jpg Datei) aus einem Bildordner löschen lassen, wenn sie den Namen der Datei kennen.
Hinweis
Wichtig In einer Produktionswebsite schränken Sie in der Regel ein, wer Änderungen an den Daten vornehmen darf. Informationen zum Einrichten der Mitgliedschaft und zu Möglichkeiten zum Autorisieren von Benutzern zum Ausführen von Aufgaben auf der Website finden Sie unter Hinzufügen von Sicherheit und Mitgliedschaft zu einer website mit ASP.NET Webseiten.
Erstellen Sie auf der Website einen Unterordner mit dem Namen "Bilder".
Kopieren Sie eine oder mehrere .jpg Dateien in den Bilderordner .
Erstellen Sie im Stammverzeichnis der Website eine neue Datei namens FileDelete.cshtml.
Ersetzen Sie den vorhandenen Inhalt durch Folgendes:
@{ bool deleteSuccess = false; var photoName = ""; if (IsPost) { photoName = Request["photoFileName"] + ".jpg"; var fullPath = Server.MapPath("~/images/" + photoName); if (File.Exists(fullPath)) { File.Delete(fullPath); deleteSuccess = true; } } } <!DOCTYPE html> <html> <head> <title>Delete a Photo</title> </head> <body> <h1>Delete a Photo from the Site</h1> <form name="deletePhoto" action="" method="post"> <p>File name of image to delete (without .jpg extension): <input name="photoFileName" type="text" value="" /> </p> <p><input type="submit" value="Submit" /></p> </form> @if(deleteSuccess) { <p> @photoName deleted! </p> } </body> </html>Diese Seite enthält ein Formular, in dem Benutzer den Namen einer Bilddatei eingeben können. Sie geben die .jpg Dateinamenerweiterung nicht ein; indem Sie den Dateinamen wie folgt einschränken, verhindern Sie, dass Benutzer beliebige Dateien auf Ihrer Website löschen.
Der Code liest den Dateinamen, den der Benutzer eingegeben hat, und erstellt dann einen vollständigen Pfad. Um den Pfad zu erstellen, verwendet der Code den aktuellen Websitepfad (wie von der
Server.MapPathMethode zurückgegeben), den Namen des Images-Ordners , den Namen des Benutzers und ".jpg" als Literalzeichenfolge.Um die Datei zu löschen, ruft der Code die
File.DeleteMethode auf, und übergibt sie den vollständigen Pfad, den Sie gerade erstellt haben. Am Ende des Markups zeigt der Code eine Bestätigungsmeldung an, dass die Datei gelöscht wurde.Führen Sie die Seite in einem Browser aus.
Geben Sie den Namen der zu löschenden Datei ein, und klicken Sie dann auf 'Absenden'. Wenn die Datei gelöscht wurde, wird der Name der Datei unten auf der Seite angezeigt.
Benutzer können eine Datei hochladen
Mit dem FileUpload Hilfsprogramm können Benutzer Dateien auf Ihre Website hochladen. Das folgende Verfahren zeigt, wie Benutzer eine einzelne Datei hochladen können.
Fügen Sie die ASP.NET Web helpers Library zu Ihrer Website hinzu, wie unter Installieren von Hilfsern auf einer ASP.NET-Website für Webseiten beschrieben, wenn Sie sie zuvor nicht hinzugefügt haben.
Erstellen Sie im ordner App_Data einen neuen Ordner, und nennen Sie ihn "UploadedFiles".
Erstellen Sie im Stammverzeichnis eine neue Datei namens FileUpload.cshtml.
Ersetzen Sie den vorhandenen Inhalt auf der Seite durch Folgendes:
@using Microsoft.Web.Helpers; @{ var fileName = ""; if (IsPost) { var fileSavePath = ""; var uploadedFile = Request.Files[0]; fileName = Path.GetFileName(uploadedFile.FileName); fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" + fileName); uploadedFile.SaveAs(fileSavePath); } } <!DOCTYPE html> <html> <head> <title>FileUpload - Single-File Example</title> </head> <body> <h1>FileUpload - Single-File Example</h1> @FileUpload.GetHtml( initialNumberOfFiles:1, allowMoreFilesToBeAdded:false, includeFormTag:true, uploadText:"Upload") @if (IsPost) { <span>File uploaded!</span><br/> } </body> </html>Der Hauptteil der Seite verwendet das
FileUpload-Hilfsprogramm, um das Hochladefeld und die Schaltflächen zu erstellen, mit denen Sie wahrscheinlich vertraut sind.
Die Eigenschaften, die Sie für das
FileUpload-Hilfsprogramm festlegen, spezifizieren, dass Sie ein einzelnes Feld für den Datei-Upload wünschen und dass die Schaltfläche mit Hochladen beschriftet sein soll. (Sie fügen später im Artikel weitere Felder hinzu.)Wenn der Benutzer auf "Hochladen" klickt, ruft der Code oben auf der Seite die Datei ab und speichert sie. Das
RequestObjekt, das Sie normalerweise zum Abrufen von Werten aus Formularfeldern verwenden, verfügt auch über einFilesArray, das die hochgeladene Datei (oder Dateien) enthält. Sie können einzelne Dateien aus bestimmten Positionen im Array abrufen, z. B. um die erste hochgeladene Datei abzurufen, sie erhaltenRequest.Files[0], um die zweite Datei abzurufen, Sie erhaltenRequest.Files[1]usw. (Denken Sie daran, dass bei der Programmierung die Zählung normalerweise bei Null beginnt.)Wenn Sie eine hochgeladene Datei abrufen, fügen Sie sie in eine Variable (hier, ) ein,
uploadedFiledamit Sie sie bearbeiten können. Um den Namen der hochgeladenen Datei zu ermitteln, rufen Sie einfach dessenFileNameEigenschaft ab. Wenn der Benutzer jedoch eine Datei hochlädt,FileNameenthält er den ursprünglichen Namen des Benutzers, der den gesamten Pfad enthält. Es könnte wie folgt aussehen:C:\Users\Public\Sample.txt
Sie möchten jedoch nicht alle Pfadinformationen, da dies der Pfad auf dem Computer des Benutzers ist, nicht für Ihren Server. Sie möchten lediglich den tatsächlichen Dateinamen (Sample.txt). Sie können nur die Datei aus einem Pfad entfernen, indem Sie die
Path.GetFileNameMethode wie folgt verwenden:Path.GetFileName(uploadedFile.FileName)Das
PathObjekt ist ein Hilfsprogramm, das eine Reihe von Methoden enthält, die Sie zum Entfernen von Pfaden, zum Kombinieren von Pfaden usw. verwenden können.Nachdem Sie den Namen der hochgeladenen Datei erhalten haben, können Sie einen neuen Pfad erstellen, in dem Sie die hochgeladene Datei auf Ihrer Website speichern möchten. In diesem Fall kombinieren
Server.MapPathSie die Ordnernamen (App_Data/UploadedFiles) und den neu entfernten Dateinamen, um einen neuen Pfad zu erstellen. Anschließend können Sie die Methode der hochgeladenen DateiSaveAsaufrufen, um die Datei tatsächlich zu speichern.Führen Sie die Seite in einem Browser aus.
Klicken Sie auf "Durchsuchen" , und wählen Sie dann eine Datei aus, die hochgeladen werden soll.
Das Textfeld neben der Schaltfläche " Durchsuchen " enthält den Pfad und den Dateispeicherort.
Klicken Sie auf Hochladen.
Klicken Sie auf der Website mit der rechten Maustaste auf den Projektordner, und klicken Sie dann auf "Aktualisieren".
Öffnen Sie den Ordner "UploadedFiles ". Die hochgeladene Datei befindet sich im Ordner.
Benutzer können mehrere Dateien hochladen
Im vorherigen Beispiel können Benutzer eine Datei hochladen. Sie können das FileUpload Hilfsprogramm jedoch verwenden, um mehrere Dateien gleichzeitig hochzuladen. Dies ist praktisch für Szenarien wie das Hochladen von Fotos, bei denen das Hochladen einer Datei gleichzeitig mühsam ist. (Sie können sich über das Hochladen von Fotos in der Arbeit mit Bildern in einer ASP.NET Webseitenwebsite informieren.) In diesem Beispiel wird gezeigt, wie Benutzer zwei gleichzeitig hochladen können, obwohl Sie dasselbe Verfahren verwenden können, um mehr hochzuladen.
Fügen Sie Ihrer Website die ASP.NET Web Helpers Library hinzu, wie im Abschnitt Installieren von Helfern auf einer ASP.NET-Websiteseite beschrieben, falls noch nicht geschehen.
Erstellen Sie eine neue Seite mit dem Namen FileUploadMultiple.cshtml.
Ersetzen Sie den vorhandenen Inhalt auf der Seite durch Folgendes:
@using Microsoft.Web.Helpers; @{ var message = ""; if (IsPost) { var fileName = ""; var fileSavePath = ""; int numFiles = Request.Files.Count; int uploadedCount = 0; for(int i =0; i < numFiles; i++) { var uploadedFile = Request.Files[i]; if (uploadedFile.ContentLength > 0) { fileName = Path.GetFileName(uploadedFile.FileName); fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" + fileName); uploadedFile.SaveAs(fileSavePath); uploadedCount++; } } message = "File upload complete. Total files uploaded: " + uploadedCount.ToString(); } } <!DOCTYPE html> <html> <head><title>FileUpload - Multiple File Example</title></head> <body> <form id="myForm" method="post" enctype="multipart/form-data" action=""> <div> <h1>File Upload - Multiple-File Example</h1> @if (!IsPost) { @FileUpload.GetHtml( initialNumberOfFiles:2, allowMoreFilesToBeAdded:true, includeFormTag:true, addText:"Add another file", uploadText:"Upload") } <span>@message</span> </div> </form> </body> </html>In diesem Beispiel ist der
FileUploadHelfer im Seiteninhalt der Seite so konfiguriert, dass Benutzer standardmäßig zwei Dateien hochladen können. DaallowMoreFilesToBeAddedauftruegesetzt ist, rendert der Helfer einen Link, über den Benutzer weitere Uploadfelder hinzufügen können.
Um die Dateien zu verarbeiten, die der Benutzer hochlädt, verwendet der Code die gleiche grundlegende Technik, die Sie im vorherigen Beispiel verwendet haben– rufen Sie eine Datei ab
Request.Files, und speichern Sie sie dann. (Einschließlich der verschiedenen Dinge, die Sie tun müssen, um den richtigen Dateinamen und Pfad zu erhalten.) Die Innovation dieses Mal ist, dass der Benutzer möglicherweise mehrere Dateien hochlädt, und Sie wissen nicht viele. Um das herauszufinden, können SieRequest.Files.Counterhalten.Mit dieser Zahl können Sie eine Schleife durchlaufen
Request.Files, jede Datei nacheinander abrufen und speichern. Wenn Sie eine bekannte Anzahl von Malen durch eine Sammlung durchlaufen möchten, können Sie wie folgt einefor-Schleife verwenden:for(int i =0; i < numFiles; i++) { var uploadedFile = Request.Files[i]; if (uploadedFile.ContentLength > 0) { fileName = Path.GetFileName(uploadedFile.FileName); // etc. }Die Variable
iist nur ein temporärer Zähler, der von Null zu der von Ihnen festgelegten Obergrenze wechselt. In diesem Fall ist die Obergrenze die Anzahl der Dateien. Da der Zähler jedoch bei 0 beginnt, wie es für Zählvorgänge in ASP.NET typisch ist, ist die Obergrenze tatsächlich eins weniger als die Anzahl der Dateien. (Wenn drei Dateien hochgeladen werden, ist die Anzahl null bis 2.)Die
uploadedCountVariable summiert alle Dateien, die erfolgreich hochgeladen und gespeichert wurden. Dieser Code stellt die Möglichkeit fest, dass eine erwartete Datei möglicherweise nicht hochgeladen werden kann.Führen Sie die Seite in einem Browser aus. Der Browser zeigt die Seite und die beiden Uploadfelder an.
Wählen Sie zwei Dateien aus, die hochgeladen werden sollen.
Klicken Sie auf "Weitere Datei hinzufügen". Auf der Seite wird ein neues Uploadfeld angezeigt.
Klicken Sie auf Hochladen.
Klicken Sie auf der Website mit der rechten Maustaste auf den Projektordner, und klicken Sie dann auf "Aktualisieren".
Öffnen Sie den Ordner "UploadedFiles ", um die erfolgreich hochgeladenen Dateien anzuzeigen.