Upload de fichiers: compatibilité IE et Firefox [Résolu]

Signaler
Messages postés
2
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
3 octobre 2006
-
Messages postés
2
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
3 octobre 2006
-
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

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Déplacé sur aspfr.com












<hr size="2" />




VC# forever
Messages postés
2
Date d'inscription
dimanche 18 janvier 2004
Statut
Membre
Dernière intervention
3 octobre 2006

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.