(Vorwort: Diese Frage bezieht sich auf ASP.NET MVC 3.0, das 2011 veröffentlicht wurde. Es geht nicht um ASP.NET Core 3.0, das 2019 veröffentlicht wurde.)
Ich möchte eine Datei in asp.net mvc hochladen. Wie kann ich die Datei mit dem HTML- input file
Steuerelement hochladen ?
c#
asp.net-mvc
asp.net-mvc-3
user637197
quelle
quelle
Antworten:
Sie verwenden kein Dateieingabesteuerelement. Serverseitige Steuerelemente werden in ASP.NET MVC nicht verwendet. Lesen Sie den folgenden Blog-Beitrag, der zeigt, wie dies in ASP.NET MVC erreicht wird.
Sie erstellen also zunächst ein HTML-Formular, das eine Dateieingabe enthält:
und dann hätten Sie einen Controller, der den Upload abwickelt:
quelle
<httpRuntime maxRequestLength="x" />
in Ihrer web.config festlegen möchten, wobei x die Anzahl der KB ist, die zum Hochladen zulässig sind.Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })
. Dies ist nützlich, wenn es sich um eine Teilansicht handelt, die aus mehreren übergeordneten Ansichten (oder ähnlichem) aufgerufen wird.zu übertragen an
byte[]
(zB zum Speichern in DB):Um den Eingabestream direkt in die Datenbank zu übertragen, ohne ihn im Speicher zu speichern, können Sie diese von hier übernommene und etwas geänderte Klasse verwenden :
und die Verwendung:
quelle
using (MemoryStream ms = new MemoryStream()) { /* ... */ }
File.ReadAllBytes
Alternative Methode zur Übertragung in Byte [] (zum Speichern in DB).
Die Methode von @ Arthur funktioniert ziemlich gut, kopiert jedoch nicht perfekt, sodass MS Office-Dokumente möglicherweise nicht geöffnet werden können, nachdem sie aus der Datenbank abgerufen wurden. MemoryStream.GetBuffer () kann zusätzliche leere Bytes am Ende des Bytes [] zurückgeben. Sie können dies jedoch beheben, indem Sie stattdessen MemoryStream.ToArray () verwenden. Ich fand jedoch, dass diese Alternative für alle Dateitypen perfekt funktioniert:
Hier ist mein vollständiger Code:
Dokumentenklasse:
Datei download:
Datei-Upload:
Ansicht (Ausschnitt):
quelle
Oft möchten Sie auch ein Ansichtsmodell übergeben und nicht die einzige Datei. Im folgenden Code finden Sie einige weitere nützliche Funktionen:
Dies kann über den folgenden Code erfolgen:
Stell sicher dass du hast
aus Ihrer Sicht für Validierungsfehler.
Beachten Sie auch, dass die maximale Standardanforderungslänge 4 MB (maxRequestLength = 4096) beträgt. Um größere Dateien hochzuladen, müssen Sie diesen Parameter in web.config ändern:
(40960 = 40 MB hier).
Das Ausführungszeitlimit ist die gesamte Anzahl von Sekunden. Möglicherweise möchten Sie es ändern, um das Hochladen großer Dateien zu ermöglichen.
quelle
In der Ansicht:
während der folgende Code in der Steuerung:
quelle
Ich muss die Datei in 100-KB-Dateiblöcken und den letzten Teil des Upload-Dateispeichers in der Datenbank mit dem Befehl hochladen. Ich hoffe, es wird Ihnen helfen.
Javascript (Knockout Js)
HTML Quelltext:
quelle
Wie ich meine mache, ist so ziemlich wie oben. Ich zeige Ihnen meinen Code und wie man ihn mit einer MYSSQL-Datenbank verwendet ...
Dokumententabelle in DB -
int Id (PK), Zeichenfolge URL, Zeichenfolge Beschreibung, CreatedBy, TenancyId DateUploaded
Die obige Code-ID ist der Primärschlüssel, die URL ist der Name der Datei (mit dem Dateityp am Ende), die Dateibeschreibung, die in der Dokumentansicht ausgegeben werden soll. CreatedBy ist derjenige, der die Datei hochgeladen hat, tenancyId, dateUploaded
In der Ansicht müssen Sie den Enctype definieren, sonst funktioniert er nicht richtig.
Der obige Code gibt Ihnen die Schaltfläche zum Durchsuchen. In meinem Projekt habe ich eine Klasse namens IsValidImage, die nur überprüft, ob die Dateigröße unter Ihrer angegebenen maximalen Größe liegt. Überprüft, ob es sich um eine IMG-Datei handelt. Dies ist alles in einer Klassen-Bool-Funktion. Wenn also true, wird true zurückgegeben.
Also in der Steuerung:
quelle
quelle
Komplette Lösung geben
Verwenden Sie zuerst die Eingabe in. CShtml in der MVC-Ansicht
Rufen Sie jetzt Ajax an
Controller Json Call
quelle
Ich gebe Ihnen die einfache Methode, um zu verstehen und zu lernen.
Zuerst müssen Sie den folgenden Code in Ihre .Cshtml- Datei schreiben .
Geben Sie dann in Ihren Controller folgenden Code ein:
Dazu müssen Sie BAL- und DAL-Layer gemäß Ihrer Datenbank erstellen.
quelle
Hier ist mein Arbeitsbeispiel:
quelle
Bitte beachten Sie diesen Code nur zum Hochladen von Bildern . Ich benutze HTMLHelper zum Hochladen von Bildern . Geben Sie diesen Code in die cshtml-Datei ein
Erstellen Sie dann ein HTMLHelper for Upload-Tag
und schließlich in Aktion Laden Sie Ihre Datei hoch
quelle
quelle
Datei-Upload mit Formulardaten
.cshtml-Datei
Serverseitiger Code
quelle
Einfache Möglichkeit, mehrere Dateien zu speichern
cshtml
Regler
quelle
Da ich Probleme beim Hochladen von Dateien im IE-Browser gefunden habe, würde ich vorschlagen, dies so zu behandeln.
Aussicht
Regler
quelle
Html:
Code dahinter:
quelle
Kasse meine Lösung
Fügen Sie diese Funktionen zu Ihrem hinzu,
base controller
damit Sie sie in verwenden könnenall controllers
Kasse, wie man es benutzt
und hier ist ein vollständiges Beispiel
quelle
Im Controller
Im Hinblick auf
In der Modalklasse
Erstellen Sie einen Ordner als Uploads im Inhaltsordner des Projekts
quelle
Die meisten Antworten scheinen legitim genug zu sein, obwohl ich ein Beispielprojekt für Sie auf donnetfiddle durchgeführt habe
Ich verwende LumenWorks.Framework für CSV-Arbeit, aber es ist kein Muss.
Demo
Aussicht
Regler:
quelle
Ich habe den gleichen Fehler festgestellt, während ich das Konzept zum Hochladen von Dateien durchführe. Ich kenne viele Antworten von Entwicklern auf diese Frage.
Auch wenn ich auf diese Frage antworte, habe ich diesen Fehler durch den unten genannten unaufmerksamen Fehler erhalten.
Stellen Sie beim Angeben des Namensattributs sicher, dass Ihre Controller-Parameter auch den gleichen Namenswert "uploadedFile" haben. So was :
Andernfalls wird es nicht zugeordnet.
quelle