Comment puis-je obtenir un formulaire Web ASP.net (v3.5) pour publier un fichier en utilisant un ancien <input type="file" />
?
Je ne suis pas intéressé par l'utilisation du contrôle serveur ASP.net FileUpload.
asp.net
upload
file-upload
Ronnie Overby
la source
la source
runat="server"
, elle n'est pas indépendante du serveur d'ASP.NETvar fileUploaded = document.getElementById("myFile").files[0];
et vous pouvez même obtenir les octets en utilisantreadAsArrayBuffer
: stackoverflow.com/questions/37134433/... - mais qu'allez -vous faire avec tous ces octets côté client? L'OP veut éviter complètement la communication côté serveur de contrôle ASP .NET. -1 à vous.Voici une solution sans dépendre d'aucun contrôle côté serveur, tout comme OP l'a décrit dans la question.
Code HTML côté client:
Page Load.aspx:
la source
Request.Files[0]
place deRequest.Files["UploadedFile"]
et tandis que l'OP utilisait ASP .NET pur et non MVC, si quelqu'un veut l'utiliser pour MVC, vous avez juste besoinHttpPostedFileBase
deHttpPostedFile
.Vous devrez définir l'
enctype
attribut duform
àmultipart/form-data
; alors vous pouvez accéder au fichier téléchargé en utilisant laHttpRequest.Files
collection.la source
utiliser le contrôle HTML avec un attribut serveur runat
Puis dans asp.net Codebehind
Il existe également des options de troisième partie qui afficheront la progression si vous êtes intéressé
la source
<asp:FileUpload ID="fileUpload1" runat="server"></asp:FileUpload>
) C'est différent de dire de ne pas mettre unrunat=server
sur uninput
champ.HtmlInputFile
contrôle.Oui, vous pouvez y parvenir par la méthode ajax post. côté serveur, vous pouvez utiliser httphandler. Nous n'utilisons donc aucun contrôle de serveur selon vos besoins.
avec ajax, vous pouvez également afficher la progression du téléchargement.
vous devrez lire le fichier en tant que flux d'entrée.
Exemple de code
la source
fs.close()
tout le reste pourrait finir dans des fichiers illisibles car ils restent en quelque sorte ouverts dans IIS.La collection Request.Files contient tous les fichiers téléchargés avec votre formulaire, qu'ils proviennent d'un contrôle FileUpload ou d'un fichier
<input type="file">
.Vous pouvez donc simplement écrire une ancienne balise d'entrée de fichier au milieu de votre WebForm, puis lire le fichier téléchargé depuis la collection Request.Files.
la source
Comme d'autres ont une réponse, Request.Files est un HttpFileCollection qui contient tous les fichiers qui ont été publiés, il vous suffit de demander à cet objet le fichier comme ceci:
Mais que se passe-t-il lorsqu'il y a plus d'un balisage d'entrée avec le même nom d'attribut:
Côté serveur, le code précédent Request.Files ["myFile"] ne renvoie qu'un seul objet HttpPostedFile au lieu des deux fichiers. J'ai vu sur .net 4.5 une méthode d'extension appelée GetMultiple mais pour les versions précédentes, elle n'existe pas, d'ailleurs je propose la méthode d'extension comme:
Cette méthode d'extension renverra tous les objets HttpPostedFile qui ont le nom «myFiles» dans HttpFileCollection s'il en existe.
la source
Contrôle HtmlInputFile
Je l'ai utilisé tout le temps.
la source
runat="server"
ce qui le transforme essentiellement en un contrôle serveur, qu'ils ne voulaient pas utiliser.Voici un article de Code Project avec un projet téléchargeable qui prétend résoudre ce problème. Avertissement: je n'ai pas testé ce code. http://www.codeproject.com/KB/aspnet/fileupload.aspx
la source
la source