Gwaedion
Messages postés23Date d'inscriptionjeudi 23 novembre 2006StatutMembreDernière intervention29 avril 2009
-
29 mai 2008 à 16:28
Gwaedion
Messages postés23Date d'inscriptionjeudi 23 novembre 2006StatutMembreDernière intervention29 avril 2009
-
2 juin 2008 à 09:08
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...
Gwaedion
Messages postés23Date d'inscriptionjeudi 23 novembre 2006StatutMembreDernière intervention29 avril 2009 30 mai 2008 à 11:06
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 !
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 mai 2008 à 18:09
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
);