2008-12-17 6 views
0

Dans mon code ci-joint, j'essaye de télécharger un fichier via ASP.NET. Je crée dynamiquement le contrôle FileUpload ce qui signifie que ce n'est pas dans mon ViewState qui (je pense) signifie que je ne peux pas utiliser le contrôle pour télécharger des fichiers sauf si j'utilise l'ancienne méthode multipat/form-data que je ne veux pas faire. Je dois être en mesure de permettre à l'utilisateur de créer plusieurs champs FileUpload, puis lorsqu'il clique sur le bouton Upload File (s), il parcourt tous les champs FileUpload et les télécharge sur le serveur.Comment télécharger un fichier à partir d'un contrôle FileUpload créé dynamiquement avec ASP.NET?

Je suis sûr qu'il y a un moyen de le faire que je ne pense pas à - TIA!

<%@ Page Language="VB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     Dim fup As New FileUpload() 
     fup.ID = "FileUpload1" 

     PlaceHolder1.Controls.Add(fup) 
    End Sub 

    Protected Sub btnUploadFile_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     ' HOW DO I GET THE FILE THAT WAS SELECTED IN THE DYNAMICALLY CREATE FILEUPLOAD CONTROL? 
    End Sub 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div style="padding:13px"> 
     <asp:Button ID="btnAdd" runat="server" Text="Add FileUpload Control" OnClick="btnAdd_Click" /> 
     <br /><br /> 
     <asp:PlaceHolder ID="PlaceHolder1" runat="server" /> 
     <br /><br /> 
     <asp:Button ID="btnUploadFile" runat="server" Text="Upload File(s)" OnClick="btnUploadFile_Click" /> 
    </div> 
    </form> 
</body> 
</html> 

Répondre

1

ici est une version plus longue de ce qui précède: C#

print("HttpFileCollection UploadedFiles = Request.Files; 
    HttpPostedFile UserPostedFile; 
    int UploadFileCount = UploadedFiles.Count; 
    if (UploadFileCount >= 1) 
    { 
    for (int i = 0; i < UploadFileCount; ++i) 
    { 
     UserPostedFile = UploadedFiles[i]; 
     UserPostedFile.SaveAs(UserPostedFile.FileName); 
    } 
    }"); 
2

Vous pouvez utiliser Request.Files

Il contient les fichiers téléchargés sous forme d'objets HttpPostedFile.

foreach(HttpPostedFile file in Request.Files) 
    file.SaveAs(...); 
0

je reçois cette erreur lorsque je tente que (que je suppose est parce qu'il n'y a pas enctype = « multipart/form-data » comme je mentionne ne pas vouloir avoir à faire dans mon message d'origine):

Impossible de convertir l'objet de type 'System.String' en type 'System.Web.HttpPostedFile'. Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails de l'exception: System.InvalidCastException: Impossible de convertir l'objet de type 'System.String' en type 'System.Web.HttpPostedFile'.

Erreur Source:

Ligne 13: Ligne 14: Protégé Sous btnUploadFile_Click (expéditeur de ByVal comme objet, ByVal e comme System.EventArgs) Ligne 15: Pour chaque fichier HttpPostedFile Dans Request.Files Ligne 16 : Response.Write (file.FileName) Ligne 17: Suivant

0

Le problème est que le contrôle FileUpload a bloqué le paramètre FileName d'être défini par programme. La raison en est de protéger l'utilisateur contre un script malveillant décidant qu'il veut télécharger des fichiers système sur le serveur au lieu de ce que l'utilisateur veut.

Vous ne serez pas en mesure d'utiliser le contrôle FileUpload dans la situation que vous décrivez ci-dessus, vous aurez envie de chercher une alternative.

0

"You will not be able to use the FileUpload control in the situation you describe above, you'll want to seek out an alternative."

Vraiment? Il n'y a aucun moyen d'enregistrer un contrôle créé dynamiquement dans ViewState ou quelque chose de sorte que votre page se souvienne qu'il est là pour que vous puissiez y accéder après un PostBack?

Questions connexes