Upload de fichiers: compatibilité IE et Firefox

Résolu
Pit_the_Hitman Messages postés 2 Date d'inscription dimanche 18 janvier 2004 Statut Membre Dernière intervention 3 octobre 2006 - 2 oct. 2006 à 10:58
Pit_the_Hitman Messages postés 2 Date d'inscription dimanche 18 janvier 2004 Statut Membre Dernière intervention 3 octobre 2006 - 3 oct. 2006 à 09:27
Bonjour à tous,

Etant chargé pour un stage de réaliser un formulaire web ayant une interaction avec Microsoft CRM, j'ai besoin de fournir aux utilisateurs la possibilité d'uploader des fichiers à l'aide d'un bouton de type:

<

input
id="file1"
type="file"
runat="server"
/>

Ensuite, dans le code behind, j'upload le fichiers sur le serveur:

if

(file1.PostedFile !=
null){

//recuperation du nom de fichier

string StrFileName = System.IO.
Path.GetFileName(file1.PostedFile.FileName);

//recuperation du type de fichier

string StrFileType = file1.PostedFile.ContentType;

//recuperation de la taille du fichier

int IntFileSize = file1.PostedFile.ContentLength;

FileStream

fs =
File.OpenRead(file1.Value);

//FileStream fs = File.OpenRead(System.IO.Path.GetFullPath(file1.PostedFile.FileName));

byte[] byteData =
new
byte[IntFileSize];fs.Read(byteData, 0, byteData.Length);

string encodedData = System.
Convert.ToBase64String(byteData);

//creation de la requete

UploadFromBase64DataAnnotationRequest upload =
new
UploadFromBase64DataAnnotationRequest();

//definition des proprietes du fichier upload.AnnotationId = annotationguid;

upload.FileName = StrFileName;

upload.MimeType = StrFileType;

upload.Base64Data = encodedData;

//Execution de la requete

UploadFromBase64DataAnnotationResponse uploaded = (
UploadFromBase64DataAnnotationResponse)service.Execute(upload);

Bon il y a des fonctions spécifiques au SDK de MS CRM mais mon problème survient à la ligne:

FileStream

fs =
File.OpenRead(file1.Value);

Lors des tests, l'upload fonctionne nickel avec IE car que ce soit file1.Value ou file1.PostedFile.Filename, je recupere bien le chemin de la machine cliente (ex: C:\test.txt)
Or qd je switch sur Firefox, j'ai beau utiliser file1.value ou file1.postedfile.filename, je ne recupere que le nom du fichier (test.txt dans mon exemple) ce qui se traduit par une erreur du genre:

Impossible de trouver le fichier 'C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\test.txt'

Voila si qqn pouvait m'aider la dessus je lui en serait reconnaissant car la seule piste que j'ai trouvé sur le net était d'utiliser:

System.IO.Path.GetFullPath(file1.PostedFile.Filename)   <-- Me retourne aussi 'C:\Program Files\Microsoft Visual Studio 8\Common7\IDE en chemin sous Firefox
System.IO.Path.GetDirectoryName(file1.PostedFile.Filename) <-- Me retourne "" (rien quoi xD) sous Firefox

Merci par avance pour votre aide et pour m'avoir lu.

3 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 oct. 2006 à 11:40
Bonjour,


PostedFile.FileName est inutile celui ci va te retourner le nom du fichier sur la machine client mais sur le server tu n'as pas accés à ce fichier !!! pour l'instant ca fonctionne car tu bosses en local mais une fois que tu auras déployé ton site le serveur n'aura pas accés à ce fichier donc ca va planter.


Il faut passer par PostedFile.InputStream pour recuperer le stream du fichier uploadé ou alors utilisé la méthode SaveAs(String filename) qui permet d'enregistrer le fichier sur le serveur.

Pour des raisons de securité n'utilises jamais postedFile.FileName imagine que quelqu'un t'envoie un fichier nommé web.config ou lapage.aspx et que tu stock ces fichiers dans un repertoire du site (ce qu'il ne faut pas faire non plus)





<hr />

Cyril - MVS - MCP
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
2 oct. 2006 à 11:05
Déplacé sur aspfr.com












<hr size="2" />




VC# forever
0
Pit_the_Hitman Messages postés 2 Date d'inscription dimanche 18 janvier 2004 Statut Membre Dernière intervention 3 octobre 2006
3 oct. 2006 à 09:27
Nickel, j'ai juste eut à remplacer:



FileStream



fs =

File
.OpenRead(file1.PostedFile.FileName);

Par:

Stream flux = file1.PostedFile.InputStream;

Ca fonctionne bien sur le serveur avec Firefox ou IE.

Merci à toi Cyril pour ton aide et ta rapidité de réponse.
0
Rejoignez-nous