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

Pit_the_Hitman 2 Messages postés dimanche 18 janvier 2004Date d'inscription 3 octobre 2006 Dernière intervention - 2 oct. 2006 à 10:58 - Dernière réponse : Pit_the_Hitman 2 Messages postés dimanche 18 janvier 2004Date d'inscription 3 octobre 2006 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
jesusonline 6827 Messages postés dimanche 15 décembre 2002Date d'inscription 13 octobre 2010 Dernière intervention - 2 oct. 2006 à 11:40
3
Merci
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

Merci jesusonline 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de jesusonline
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 2 oct. 2006 à 11:05
0
Merci
Déplacé sur aspfr.com












<hr size="2" />




VC# forever
Commenter la réponse de cs_Bidou
Pit_the_Hitman 2 Messages postés dimanche 18 janvier 2004Date d'inscription 3 octobre 2006 Dernière intervention - 3 oct. 2006 à 09:27
0
Merci
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.
Commenter la réponse de Pit_the_Hitman

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.