Upload de fichier [Résolu]

Signaler
Messages postés
23
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2009
-
Messages postés
23
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2009
-
Bonjour,

J'ai trouvé plusieurs tuto qui permettaient de faire un upload vers un serveur mais je n'arrive pas à le faire fonctionner.

voici l'érreur générée : "Object reference not set to an instance of a object."

Voici mon code :

PAGE: ASCX
 

 
 
 



PAGE: CS

public void EnvoieFichier_Click(object sender, System.EventArgs e)
     {
         // Envoie le fichier choisi
         if ((BtnChoixFichier.PostedFile.ContentLength < 1))
         {
             AlertUpload.Text = "Attention : Il manque le fichier ou celui-ci est vide.";
         }
         else {
             if ((BtnChoixFichier.PostedFile.ContentLength > 100000)) {
                 AlertUpload.Text = "Attention : Taille du Fichier trop importante";
             }
             else {
                 string sRepertoireFichierServeur = "C:\\NewFolder";
                 string sNomFichierUpload = BtnChoixFichier.PostedFile.FileName.Substring(BtnChoixFichier.PostedFile.FileName.LastIndexOf(@"") + 1);
                 try {
                     BtnChoixFichier.PostedFile.SaveAs(sRepertoireFichierServeur + sNomFichierUpload);
                     AlertUpload.Text = "Upload du fichier : " + sNomFichierUpload + " - Taille : " + BtnChoixFichier.PostedFile.ContentLength;
                 }
                 catch {
                     AlertUpload.Text = "Erreur dans l'enregistrement du Fichier : " + sNomFichierUpload;
                 }
             }
         }
     }



En faite, BtnChoixFichier.PostedFile est null et je ne sais pas pourquoi...

Merci de me venir en aide

4 réponses

Messages postés
23
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2009

Bon, je continu mon monologue ; ça me sert de térapie...

Je viens de tester mon code dans un nouveau projet et... ça marche !

Mon upload se trouve dans un onglet, lui même situé dans un UC, et l'UC dans une web form !

il me reste plus qu'à essayé de bloquer l'update.

Merci de m'avoir permis de parler de mes problèmes...
Messages postés
23
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2009

J'ai trouvé un autre exemple similaire mais qui utilise un FileUpload. Et cette fois-ci l'erreur est qu'il ne trouve pas le fichier que je veux uploader...

Quand je test : if (FileUpload1.HasFile) il me sort que HasFile renvoie null...

 Alors que j'ai bien appuyé sur parcourir et selectionné un fichier... j'ai testé une image et un fichier texte rien n'y fait.

Pourtant il m'affiche bien le chemin complet dans la textbox du FileUpload.

Je ne comprend pas ; le FileUpload est un outils déjà tout fait... il n'y a rien à faire normalement... enfin presque !

Peut-être ai-je oublié quelque chose mais je ne vois pas quoi !

J'ai regardé sur le msdn, il y a juste écrit :

 "Avant d'appeler la méthode SaveAs pour enregistrer le fichier sur le serveur, utilisez la propriété HasFile pour vérifier que le contrôle FileUpload contient un fichier. Si HasFile retourne true, appelez la méthode SaveAs. SI elle retourne false, affichez un message à l'utilisateur indiquant que le contrôle ne contient pas de fichier."

> donc en gros quand on ajoute un fichier, le HasFile revoie true... eh bah non !

voici mon code :

PAGE: ASCX

&nbsp;

PAGE: CS

protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
            try
            {
                FileUpload1.SaveAs("C:\\...\\...\\...\\Folder\" +
                     FileUpload1.FileName);
                Label1.Text = "File name: " +
                     FileUpload1.PostedFile.FileName + "
" +
                     FileUpload1.PostedFile.ContentLength + " kb
" +
                     "Content type: " +
                     FileUpload1.PostedFile.ContentType;
            }
            catch (Exception ex)
            {
                Label1.Text = "ERROR: " + ex.Message.ToString();
            }
        else
        {
            Label1.Text = "You have not specified a file.";
        }
    }

Si une âme charitable passe par là...
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
86
Salut,

Heu, de rien ;-)

Sinon quelques remarques :

1) FileUpload1.SaveAs("C:\\...\\...\\...\\Folder\" + FileUpload1.FileName);
> pas de chemins en dur dans le code > fichier de config etc
> si tu y tiens vraiment, préfixe la chaine de @, ça évite de doubler les caractères d'échappement : "C:\\...\\...\\...\\Folder\" > @"C:\...\...\...\Folder"
=> utilises Path.Combine : FileUpload1.SaveAs(Path.Combine(leCheminPasEnLiteral, FileUpload1.FileName));

2) String.Format, ça rend les choses plus lisibles (et donc maintenables avec moins de douleurs)
Label1.Text = "File name: " +
                     FileUpload1.PostedFile.FileName + "
" +
                     FileUpload1.PostedFile.ContentLength + " kb
" +
                     "Content type: " +
                     FileUpload1.PostedFile.ContentType;
=>
Label1.Text = String.Format("File name: {0}
{1} kb
Content type: {2}", 
  FileUpload1.PostedFile.FileName,
  FileUpload1.PostedFile.ContentLength,
  FileUpload1.PostedFile.ContentType
  );

Et si tu veux garder les sauts pour la lisibilité du code, tu peux, c'est permit, les chaines litérales sont concaténées à la compilation et non à l'execution (donc pas de problème de perf supplémentaire) :
Label1.Text = String.Format(
   "File name: {0}
"
   + "{1} kb
"
   + "Content type: {2}", 
  FileUpload1.PostedFile.FileName,
  FileUpload1.PostedFile.ContentLength,
  FileUpload1.PostedFile.ContentType
  );

/*
coq
MVP Visual C#
CoqBlog
*/
Messages postés
23
Date d'inscription
jeudi 23 novembre 2006
Statut
Membre
Dernière intervention
29 avril 2009

Merci de tes remarques, je vais modifier mon code.