Si vous souhaitez réaliser la fonction de téléchargement d'un nombre quelconque de fichiers, cliquez sur un bouton pour ajouter une boîte de téléchargement de fichiers, que vous avez déjà vue sur le disque dur du réseau. Je sais comment ajouter n'importe quel contrôle de fichier de téléchargement à l'aide de JavaScript. Le problème est que le contrôle HTML est ajouté et je ne sais pas comment faire en sorte que le côté serveur obtienne le fichier.
J'ai donc recherché sur Google "Téléchargement de fichiers multiples ASP.NET" et j'ai trouvé un article intitulé "Implémentation du téléchargement de fichiers multiples dans ASP.NET". L'article a été implémenté dans VB.NET et la fonction était exactement la même que celle-ci. Je voulais. Je veux principalement voir comment le serveur obtient les fichiers téléchargés par le client. Après avoir lu le code dans l'article, il s'avère que c'est si simple que System.Web.HttpContext.Current.Request.Files contient les fichiers. téléchargé par le navigateur client. J'utilise C#. J'ai écrit un code simple, pensant à l'origine que cela devrait aller, mais de manière inattendue, après avoir téléchargé 3 images, System.Web.HttpContext.Current.Request.Files a renvoyé 0 format de fichier.
Je ne sais pas pourquoi, mais j'ai regardé le code. C'est si simple et ça ne peut pas être faux. Ensuite, j'ai regardé plusieurs autres articles dans les résultats de recherche Google et j'ai découvert que le premier article que j'avais consulté n'était pas le même. travail original. Il existe deux exemples du travail original sur le site Web de l'auteur. Il existe deux versions, l'une est VB.NET et l'autre est C#. Maintenant, je n'ai pas besoin de l'écrire moi-même. local et exécutez-le. Cela fonctionne, alors pourquoi le code que j'ai écrit ne fonctionne-t-il pas ? J'ai comparé à plusieurs reprises la différence entre mon code et le code de l'article, j'ai essayé plusieurs endroits et j'ai finalement découvert que cela n'avait rien à voir avec d'autres endroits. La raison était <form id="form1" runat="server" enctype=". multipart/form- data"> attribut enctype, la page créée dans VS 2005 n'a pas cet attribut, mais l'exemple d'article en a. J'ai ajouté plus tard enctype="multipart/form-data" et System.Web.HttpContext.Current.Request .Files sont devenus Le nombre de fichiers peut être obtenu normalement.
Les pages construites dans VS 2003 ont probablement cet attribut par défaut, sinon l'auteur d'un attribut aussi important l'aurait mentionné dans l'article.
se référer à :
"Implémentation de plusieurs téléchargements de fichiers dans ASP.NET"
Le code de test que j'ai créé :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo._Default" %>
< ! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<langage de script="JavaScript">
fonction addFile()
{
var str = '<INPUT type="fichier" size="50" NAME="Fichier">'
document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str)
}
</script>
<html xmlns=" http://www.w3.org/1999/xhtml " >
<head runat="serveur">
<title>Page sans titre</title>
</tête>
<corps>
<form id="form1" runat="server" enctype="multipart/form-data">
<input type="button" value="Ajouter" onclick="addFile()">
<input onclick="this.form.reset()" type="button" value="Reset(ReSet)">
<asp:Button Runat="server" Text="Upload" ID="Upload" OnClick="Upload_Click1" ></asp:Button>
<div id="MonFichier">
<input type="file" name="Fichier" />
</div>
</form>
</corps>
</html>
en utilisant le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Collections ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
la démo de l'espace de noms
System.Web.UI.HtmlControls ;
{
classe partielle publique _Default : System.Web.UI.Page
{
protected void Page_Load (expéditeur de l'objet, EventArgs e)
{
}
protected void Upload_Click1 (expéditeur de l'objet, EventArgs e)
{
HttpFileCollection _files = System.Web.HttpContext.Current.Request.Files ;
pour (int i = 0 ; i < _files.Count ; i++)
{
_files[i].SaveAs(Server.MapPath("~/Files/" + _files[i].FileName));
}
}
}
}
http://bg5sbk.cnblogs.com/archive/2006/06/11/mulitfileuploadtest.html