Wie kann ich ein ASP.net-Webformular (v3.5) dazu bringen, eine Datei mit einem einfachen alten zu veröffentlichen <input type="file" />
?
Ich bin nicht an der Verwendung des ASP.net FileUpload-Serversteuerelements interessiert.
asp.net
upload
file-upload
Ronnie Overby
quelle
quelle
runat="server"
, es ist nicht unabhängig von den Server-Sachen von ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
und Sie können sogar die Bytes mit bekommenreadAsArrayBuffer
: stackoverflow.com/questions/37134433/... - aber was werden Sie mit allen , die Bytes Client-Seite zu tun? Das OP möchte die ASP .NET-Steuerung und nicht die serverseitige Kommunikation insgesamt vermeiden. -1 für dich.Hier ist eine Lösung, ohne sich auf eine serverseitige Steuerung zu verlassen, wie es OP in der Frage beschrieben hat.
Clientseitiger HTML-Code:
Page Load-Methode von upload.aspx:
quelle
Request.Files[0]
anstelle vonRequest.Files["UploadedFile"]
und während das OP gerade ASP .NET und nicht MVC verwendet, wenn jemand dies für MVC verwenden möchte, brauchen Sie nurHttpPostedFileBase
anstelle vonHttpPostedFile
.Sie werden die festlegen müssen
enctype
Attribut desform
zumultipart/form-data
; Anschließend können Sie über dieHttpRequest.Files
Sammlung auf die hochgeladene Datei zugreifen .quelle
Verwenden Sie das HTML-Steuerelement mit einem Runat-Server-Attribut
Dann in asp.net Codebehind
Es gibt auch einige Optionen für Dritte , die den Fortschritt anzeigen, wenn Sie interessiert sind
quelle
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
) , das anders ist als zu sagen , kein setzenrunat=server
auf eineminput
Feld.HtmlInputFile
Kontrolle.Ja, Sie können dies mit der Ajax-Post-Methode erreichen. Auf der Serverseite können Sie httphandler verwenden. Daher verwenden wir keine Serversteuerelemente gemäß Ihren Anforderungen.
Mit Ajax können Sie auch den Upload-Fortschritt anzeigen.
Sie müssen die Datei als Eingabestream lesen.
Beispielcode
quelle
fs.close()
alles andere in unlesbaren Dateien landet, da diese in IIS irgendwie offen bleiben.Die Request.Files-Auflistung enthält alle Dateien, die mit Ihrem Formular hochgeladen wurden, unabhängig davon, ob sie von einem FileUpload-Steuerelement stammen oder manuell geschrieben wurden
<input type="file">
.Sie können also einfach ein einfaches altes Dateieingabe-Tag in die Mitte Ihrer WebForm schreiben und dann die aus der Request.Files-Sammlung hochgeladene Datei lesen.
quelle
Wie andere antworten, ist Request.Files eine HttpFileCollection, die alle Dateien enthält, die veröffentlicht wurden. Sie müssen nur dieses Objekt nach der Datei wie folgt fragen:
Was passiert jedoch, wenn mehr als ein Eingabe-Markup mit demselben Attributnamen vorhanden ist:
Auf der Serverseite gibt der vorherige Code Request.Files ["myFile"] anstelle der beiden Dateien nur ein HttpPostedFile-Objekt zurück. Ich habe auf .net 4.5 eine Erweiterungsmethode namens GetMultiple gesehen, aber für frühere Versionen existiert sie nicht. Im Übrigen schlage ich die Erweiterungsmethode wie folgt vor:
Diese Erweiterungsmethode gibt alle HttpPostedFile-Objekte zurück, die den Namen "myFiles" in der HttpFileCollection haben, falls vorhanden.
quelle
HtmlInputFile-Steuerelement
Ich habe das die ganze Zeit benutzt.
quelle
runat="server"
was es im Wesentlichen in ein Serversteuerelement verwandelt, das sie nicht verwenden wollten.Hier ist ein Code Project-Artikel mit einem herunterladbaren Projekt, das vorgibt, dieses Problem zu lösen. Haftungsausschluss: Ich habe diesen Code nicht getestet. http://www.codeproject.com/KB/aspnet/fileupload.aspx
quelle
quelle