330 votes

Comment obtenir le chemin complet du fichier sélectionné lors du changement de <input type='file'> en utilisant javascript, jquery-ajax ?

Comment obtenir le chemin complet d'un fichier lors de la sélection d'un fichier à l'aide de la fonction <input type=‘file’>

<input type="file" id="fileUpload">
<script type="text/javascript">
function getFilePath(){
     $('input[type=file]').change(function () {
         var filePath=$('#fileUpload').val(); 
     });
}
</script>

mais la variable filePath contient only name du fichier sélectionné, et non le full path .
J'ai fait des recherches sur le net, mais il semble que pour des raisons de sécurité, les navigateurs (FF, chrome) ne donnent que le nom du fichier.
Existe-t-il un autre moyen d'obtenir le chemin complet du fichier sélectionné ?

0 votes

1 votes

0 votes

@nauphal merci pour le commentaire mais y a-t-il un autre moyen d'obtenir le chemin complet du fichier sélectionné ?

219voto

Vohuman Points 79122

Pour des raisons de sécurité, les navigateurs ne l'autorisent pas, c'est-à-dire que le JavaScript du navigateur n'a pas accès au système de fichiers. Cependant, en utilisant l'API de fichiers HTML5, seul Firefox offre une possibilité d'accès au système de fichiers. mozFullPath mais si vous essayez d'obtenir la valeur, vous obtenez une chaîne vide :

$('input[type=file]').change(function () {
    console.log(this.files[0].mozFullPath);
});

https://jsfiddle.net/SCK5A/

Alors ne perdez pas votre temps.

edit : Si vous avez besoin du chemin du fichier pour lire un fichier, vous pouvez utiliser la fonction Lecteur de fichiers Voici une question connexe sur SO : Prévisualisez une image avant qu'elle ne soit téléchargée.

1 votes

Voir ce lien car il m'a aidé à résoudre le même problème.

0 votes

... Le titre de la question liée est : Prévisualiser une image avant de la télécharger .

0 votes

Et pourtant, j'ai obtenu l'URL du chemin à envoyer au serveur.

128voto

DWX Points 632

Essayez ça :

Il vous donnera un chemin temporaire et non le chemin exact, vous pouvez utiliser ce script si vous voulez montrer des images sélectionnées comme dans cet exemple jsfiddle(Essayez-le en sélectionnant des images ainsi que d'autres fichiers):-

JSFIDDLE

Voici le code :-

HTML:-

<input type="file" id="i_file" value=""> 
<input type="button" id="i_submit" value="Submit">
<br>
<img src="" width="200" style="display:none;" />
<br>
<div id="disp_tmp_path"></div>

JS:-

$('#i_file').change( function(event) {
    var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',URL.createObjectURL(event.target.files[0]));

    $("#disp_tmp_path").html("Temporary Path(Copy it and try pasting it in browser address bar) --> <strong>["+tmppath+"]</strong>");
});

Ce n'est pas exactement ce que vous recherchiez, mais cela peut peut-être vous aider.

0 votes

Existe-t-il un moyen de faire cela avec d'autres types de fichiers : pdf, docx, etc. et d'afficher une icône à la place de l'image ? Pour mon utilisation, je veux stocker les fichiers sur la page avant de les envoyer, ce qui donne à l'utilisateur la possibilité d'ajouter un commentaire pour le charger comme un message avec un texte.

0 votes

Dois-je seulement mettre le contenu de "tmppath" dans la barre d'adresse du navigateur ? J'ai essayé et ça ne fonctionne pas.

0 votes

@GangsarSwaPurba Malheureusement, cela ne fonctionne pas dans IE9 - voir URL.createObjectURL() .

19voto

Dipesh Parmar Points 17016

Vous ne pouvez pas le faire - le navigateur ne le permettra pas pour des raisons de sécurité.

Lorsqu'un fichier est sélectionné en utilisant l'objet input type=file, la valeur de la propriété value dépend de la valeur de l'option de sécurité "Include local local lors du téléchargement de fichiers vers un serveur" de la zone de sécurité de la zone de sécurité utilisée pour afficher la page Web qui contient l'objet objet.

Le nom de fichier entièrement qualifié du fichier sélectionné est renvoyé uniquement lorsque ce paramètre est activé. Lorsque ce paramètre est désactivé, Internet Explorer 8 remplace le lecteur local et le chemin du répertoire par la chaîne de caractères C:\fakepath\ afin d'éviter la divulgation d'informations inappropriées.

Et d'autres

Vous avez manqué ); ceci à la fin de la fonction d'événement de changement.

Ne créez pas non plus de fonction pour l'événement de changement, mais utilisez-la simplement comme ci-dessous,

<script type="text/javascript">

    $(function()
    {
        $('#fileUpload').on('change',function ()
        {
            var filePath = $(this).val();
            console.log(filePath);
        });
    });

</script>

26 votes

J'ai essayé votre code mais il me donne un mauvais chemin. Mon fichier est dans D mais la valeur vient C:\fakepath\test.xls

5 votes

C:\fakepath\fileName.xls ... quelqu'un sait comment résoudre ce problème ?

3 votes

C'est le but de cette question, les gars : Elle ne montrera jamais le chemin réel et mettra toujours C:\fakepath\

19voto

Reddy Points 280

Vous ne pouvez pas. La sécurité vous empêche de savoir quoi que ce soit sur le système de classement de l'ordinateur du client - il se peut même qu'il n'en ait pas ! Il peut s'agir d'un MAC, d'un PC, d'une tablette ou d'un réfrigérateur connecté à Internet - vous ne savez pas, ne pouvez pas savoir et ne saurez pas. Et le fait de vous donner le chemin d'accès complet pourrait vous donner des informations sur le client, en particulier s'il s'agit d'un lecteur réseau, par exemple.

En fait, vous pouvez l'obtenir dans des conditions particulières, mais il nécessite un contrôle ActiveX, et ne fonctionnera pas dans 99,99% des circonstances.

De toute façon, vous ne pouvez pas l'utiliser pour restaurer le fichier à son emplacement d'origine (car vous n'avez absolument aucun contrôle sur l'endroit où les téléchargements sont stockés, ou même s'ils sont stockés), donc en pratique, il ne vous est pas d'une grande utilité.

2voto

bipen Points 21912

Vous ne devriez jamais le faire... et je pense qu'il est inutile d'essayer dans les derniers navigateurs (pour ce que j'en sais)... tous les derniers navigateurs, d'autre part, ne le permettront pas...

d'autres liens que vous pouvez consulter, pour trouver une solution de contournement comme obtenir la valeur côté serveur, mais pas côté client (javascript).

Chemin complet à partir de l'entrée du fichier en utilisant jQuery
Comment obtenir le chemin du fichier à partir d'un formulaire de saisie HTML dans Firefox 3

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