53 votes

Comment obtenir le chemin du fichier à partir d'un formulaire de saisie HTML dans Firefox 3

Nous avons un simple formulaire HTML avec <input type="file"> comme indiqué ci-dessous :

<form>
  <label for="attachment">Attachment:</label>
  <input type="file" name="attachment" id="attachment">
  <input type="submit">
</form>

Dans IE7 (et probablement 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 vers le fichier et le nom du fichier. et le nom du fichier.

Dans Firefox 3, il ne renvoie que le nom du fichier, en raison de la nouvelle "fonction de sécurité" permettant de tronquer le chemin d'accès, comme expliqué dans le système de suivi des bogues de Firefox ( https://bugzilla.mozilla.org/show_bug.cgi?id=143220 )

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.

Quelqu'un peut-il m'aider à trouver une solution unique pour obtenir le chemin du fichier à la fois sur Firefox 3 et IE7 ?

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...

0voto

LohanJ Points 37

Jetez un coup d'œil à XPCOM il y a peut-être quelque chose que vous pouvez utiliser si Firefox 3 est utilisé par un client.

0voto

Victor Points 3774

Voici un exemple qui pourrait vous convenir si ce dont vous avez besoin n'est pas exactement le chemin d'accès, mais une référence au fichier fonctionnant hors ligne.

http://www.ab-d.fr/date/2008-07-12/

C'est en français, mais le code est en javascript :)

Ce sont les références auxquelles l'article fait référence : http://developer.mozilla.org/en/nsIDOMFile http://developer.mozilla.org/en/nsIDOMFileList

0voto

Voici une solution alternative... Dans FF3, vous pouvez récupérer le chemin complet du fichier dans une zone de texte au lieu de la zone de navigation du fichier. Et cela aussi... En glissant/déposant le fichier !

Vous pouvez glisser-déposer votre fichier dans une zone de texte de votre page html. et il affichera le chemin complet du fichier. Ces données peuvent être transférées sur votre serveur facilement ou les manipuler.

Tout ce que vous avez à faire est d'utiliser l'extension DragDropUpload

http://www.teslacore.it/wiki/index.php?title=DragDropUpload

Cette extension vous aidera à glisser-déposer des fichiers dans votre boîte de navigation des fichiers (fichier d'entrée). Mais vous n'êtes toujours pas en mesure d'obtenir le chemin complet du fichier, si vous essayez de le récupérer.

Donc, j'ai un peu modifié cette extension. De cette façon, je peux glisser-déposer un fichier sur n'importe quel champ de saisie de texte et obtenir le chemin complet du fichier. Et ainsi je peux obtenir le chemin complet du fichier dans FF3 Firefox 3.

0voto

Une façon extrêmement moche de résoudre ce problème consiste à demander à l'utilisateur de saisir manuellement le répertoire dans une zone de texte, puis de le rajouter devant la valeur du fichier dans le JavaScript.

C'est compliqué... mais cela dépend du niveau de l'utilisateur avec lequel vous travaillez, et permet de contourner le problème de sécurité.

<form>
    <input type="text" id="file_path" value="C:/" />
    <input type="file" id="file_name" />
    <input type="button" onclick="ajax_restore();" value="Restore Database" />
</form>

JavaScript

var str = document.getElementById('file_path').value;
var str = str + document.getElementById('file_name').value;

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