45 votes

Obtenir le chemin complet d'un fichier avec le contrôle FileUpload

Je travaille sur une application web qui utilise le contrôle FileUpload. J'ai un fichier xls dans le chemin de fichier complet ' C:\Mailid.xls que j'essaie de télécharger.

Lorsque j'utilise la commande

FileUpload1.PostedFile.FileName

Je n'arrive pas à obtenir le chemin complet du fichier à partir de mon système. Cependant, lorsque j'utilise la commande ci-dessus dans un autre système, cela fonctionne bien.

J'ai également essayé les commandes suivantes, sans succès :

   System.IO.Path.GetFullPath(FileUpload1.PostedFile.FileName);
   Path.GetFileName(FileUpload1.PostedFile.FileName);
   System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).ToString();
   Convert.ToString(System.IO.Directory.GetParent(FileUpload1.PostedFile.FileName));

Comment puis-je obtenir le chemin complet ?

31voto

CraigD Points 2716

C'est actuellement Il est vrai que "lorsque vous téléchargez un fichier, le navigateur n'envoie que le nom du fichier source et non le chemin d'accès complet" - il est parfaitement logique que le serveur n'ait pas à savoir si le fichier se trouve en " C:\WINDOWS\ " ou " F:\SOMEDIR\OTHERDIR\PERSONALINFO\ ". Le nom du fichier* est toujours envoyé, et est utile à la fois pour aider l'utilisateur à "reconnaître" le contenu et éventuellement pour interroger l'extension du fichier afin d'aider à déterminer le type de fichier.

Cependant, je sais par expérience qu'Internet Explorer utilisé pour (dans les anciennes versions) envoyer le chemin entier. Il est difficile de trouver une confirmation faisant autorité (à l'exception de celle-ci). apache fileupload control doco )

Internet Explorer fournit le chemin d'accès complet au fichier téléchargé et pas seulement le nom du fichier de base.

Quoi qu'il en soit, vous ne devez pas utiliser le chemin d'accès complet ni vous attendre à ce qu'il soit envoyé par un navigateur "moderne".

23voto

elo80ka Points 4450

Peut-être que vous comprenez mal la façon FileUpload travaux.

Lorsque vous téléchargez un fichier, celui-ci est effectivement transféré de l'ordinateur du client au serveur qui héberge votre application. Si vous développez l'application, la plupart du temps, le client et le serveur sont la même machine (votre ordinateur). Cependant, une fois l'application déployée, un nombre illimité de clients peuvent se connecter au serveur, chacun téléchargeant un fichier différent.

Il n'est généralement pas nécessaire de connaître le chemin d'accès complet du fichier sur l'ordinateur du client - vous voudrez souvent faire quelque chose avec le contenu du fichier. Vos exemples semblent être en ASP.NET C#, donc je suppose que vous utilisez le contrôle FileUpload. Vous pouvez accéder au contenu du fichier téléchargé en lisant le flux brut ( FileUpload.PostedFile.InputStream ) ou en enregistrant d'abord le fichier ( FileUpload.PostedFile.SaveAs ), puis accéder au fichier sauvegardé. Il est de votre responsabilité de sauvegarder le fichier, si vous voulez qu'il soit accessible après la requête en cours - si vous ne le faites pas, ASP.NET le supprime.

Une dernière chose - n'oubliez pas de définir l'option enctype de votre formulaire en "multipart/form-data". Si vous ne le faites pas, le navigateur du client n'enverra pas le fichier et vous passerez quelques minutes à vous demander ce qui a bien pu se passer.

9voto

EricLaw Points 28850

Depuis IE8, le chemin complet n'est plus envoyé aux sites de la zone Internet.

Voir la section "Contrôle du téléchargement de fichiers" à la fin de cet article : http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx pour la discussion.

9voto

Abdul Wahhab Points 220

Essayez

Server.MapPath(FileUpload1.FileName);

Edit : Cette réponse décrit comment obtenir le chemin d'accès à un fichier sur le serveur. Elle ne décrit pas comment obtenir le chemin d'accès à un fichier sur le client, ce qui est le but de la question. La réponse à cette question est "vous ne pouvez pas", car les navigateurs modernes ne vous indiqueront pas le chemin sur le client, pour des raisons de sécurité.

8voto

Santosh Lodhi Points 79
Convert.ToString(FileUpload1.PostedFile.FileName);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X