Dans IE7 (et probablement dans tous les navigateurs connus, y compris l'ancien Firefox 2), si nous soumettons un fichier comme "//server1/path/to/file/filename", cela fonctionne correctement et donne le chemin complet du fichier et le nom du fichier.
Je n'ai aucune idée de la façon de surmonter cette "nouvelle fonctionnalité", car elle fait que tous les formulaires de téléchargement de ma webapp ne fonctionnent plus sous Firefox 3.
Il y a un grand malentendu ici. Pourquoi avez-vous besoin de la complet le chemin d'accès au fichier du côté du serveur ? Imaginons que je sois le client et que je possède un fichier à l'adresse suivante C:\path\to\passwords.txt
et je vous donne le chemin complet du fichier. Comment, en tant que serveur, obtiendriez-vous sa contenu ? Disposez-vous d'une connexion TCP ouverte vers mon système de fichiers sur disque local ? Avez-vous testé la fonctionnalité de téléchargement de fichiers lorsque vous avez mis votre application web en production sur une autre machine serveur ?
Il ne fonctionnera que si les deux le client et le serveur fonctionnent à physiquement le même machine, car vous aurez alors accès à la même système de fichiers du disque dur. Cela ne se produit que lorsque vous développez votre site web localement et que, par hasard, le navigateur web (client) et le serveur web (serveur) fonctionnent tous deux sur la même machine.
Le fait que le chemin d'accès complet au fichier soit envoyé dans MSIE et d'autres anciens navigateurs Web est dû à un problème de sécurité. bogue de sécurité . Le site W3 y RFC2388 les spécifications n'ont jamais mentionné d'inclure le chemin complet du fichier. Seulement le nom du fichier. Firefox fait son travail correctement.
Pour traiter les fichiers téléchargés, vous n'avez pas besoin de connaître le chemin d'accès complet du fichier. Vous devriez plutôt être intéressé par le fichier complet contenu que le client a déjà envoyé au serveur dans le corps de la requête dans le cas d'un multipart/form-data
demande. Changez votre formulaire pour qu'il ressemble à ce qui suit, comme indiqué dans la RFC2388 :
<form action="upload-script-url" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
La façon d'obtenir le contenu du fichier téléchargé du côté serveur dépend du langage de programmation côté serveur que vous utilisez.
-
Java/JSP : vous souhaitez utiliser Apache Commons FileUpload API pour l'analyser. Vous devriez vous retrouver avec un InputStream
avec le contenu du fichier, que vous pouvez à votre tour écrire dans n'importe quelle OutputStream
à votre goût. Vous pouvez trouver un exemple dans cette réponse .
-
Java/JSF : vous souhaitez utiliser Tomahawk t:inputFileUpload
ou tout autre composant de téléchargement de fichiers fourni par la bibliothèque de composants que vous utilisez. Ici aussi, vous voudriez obtenir le contenu du fichier en saveur d'un InputStream
. Voir ce blog y cette réponse pour un exemple.
-
PHP le contenu du fichier est déjà implicitement stocké sur le disque temporaire. Vous souhaitez utiliser move_uploaded_file()
pour le déplacer à l'endroit souhaité. Voir aussi Manuel PHP .
-
ASP.NET : pas de réponse détaillée de ma part puisque je ne le fais pas, mais Google a trouvé quelques exemples pour moi : Exemple ASP.NET , Exemple d'ASP.NET 2.0
Lorsque vous souhaitez obtenir la partie du nom du fichier téléchargé, vous devez garniture le chemin d'accès complet à partir du nom du fichier. Cette information n'est pas du tout pertinente pour vous. Voir aussi, par exemple, ceci Entrée de la FAQ Apache Commons FileUpload
Pourquoi FileItem.getName() renvoie-t-il le chemin d'accès complet, et pas seulement le nom du fichier ?
Internet Explorer fournit le chemin d'accès complet au fichier téléchargé et pas seulement le nom du fichier de base. Étant donné que FileUpload fournit exactement ce qui a été fourni par le client (navigateur), vous pouvez supprimer ces informations de chemin dans votre application.
0 votes
En théorie, vous devriez avoir besoin du chemin d'accès complet au fichier, car une fois qu'il est envoyé en amont, vous le stockez dans votre propre structure de dossiers.
1 votes
Je pense qu'il est temps d'accepter la réponse de BalusC...