92 votes

jQuery : récupérer le nom du fichier sélectionné dans <input type="file" />

Ce code devrait fonctionner dans IE (ne le teste même pas dans Firefox), mais il ne le fait pas. Ce que je veux, c'est afficher le nom du fichier joint. Vous pouvez m'aider ?

<html>
<head>
  <title>example</title>    
  <script type="text/javascript" src="../js/jquery.js"></script>
  <script type="text/javascript">  
        $(document).ready( function(){            
      $("#attach").after("<input id='fakeAttach' type='button' value='attach a file' />");      
      $("#fakeAttach").click(function() {            
        $("#attach").click();        
        $("#maxSize").after("<div id='temporary'><span id='attachedFile'></span><input id='remove' type='button' value='remove' /></div>");        
        $('#attach').change(function(){
          $("#fakeAttach").attr("disabled","disabled");          
          $("#attachedFile").html($(this).val());
        });        
        $("#remove").click(function(e){
          e.preventDefault();
          $("#attach").replaceWith($("#attach").clone());
          $("#fakeAttach").attr("disabled","");
          $("#temporary").remove();
        });
      })
    }); 
  </script> 
</head>
<body>
  <input id="attach" type="file" /><span id="maxSize">(less than 1MB)</span>    
</body>
</html>

148voto

Thinker Points 7239

C'est aussi simple que d'écrire :

$('input[type=file]').val()

Quoi qu'il en soit, je suggère d'utiliser l'attribut name ou ID pour sélectionner votre entrée. Et avec l'événement, cela devrait ressembler à ceci :

$('input[type=file]').change(function(e){
  $in=$(this);
  $in.next().html($in.val());
});

20voto

James111 Points 948

La méthode la plus simple consiste à utiliser la ligne suivante de l'application jquery en l'utilisant, vous n'obtiendrez pas le /fakepath absurde, vous obtenez directement le fichier qui a été téléchargé :

$('input[type=file]')[0].files[0]; // This gets the file
$('#idOfFileUpload')[0].files[0]; // This gets the file with the specified id

D'autres commandes utiles sont :

Pour obtenir le nom du fichier :

$('input[type=file]')[0].files[0].name; // This gets the file name

Pour obtenir le type de fichier :

Si je devais télécharger un PNG, il retournerait image/png

$("#imgUpload")[0].files[0].type

Pour obtenir la taille (en octets) du fichier :

$("#imgUpload")[0].files[0].size

Vous n'avez pas non plus besoin d'utiliser les commandes suivantes on('change' vous pouvez obtenir les valeurs à tout moment. Par exemple, vous pouvez avoir un téléchargement de fichier et lorsque l'utilisateur clique sur upload vous utilisez simplement les commandes que j'ai listées.

19voto

pazhyn Points 131
$('input[type=file]').change(function(e){
    $(this).parents('.parent-selector').find('.element-to-paste-filename').text(e.target.files[0].name);
});

Ce code ne montrera pas C:\fakepath\ avant le nom du fichier dans Google Chrome en cas d'utilisation de la fonction .val() .

4voto

Anil Gupta Points 410
<input onchange="readURL(this);"  type="file" name="userfile" />
<img src="" id="blah"/>
<script>
 function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function (e) {
            $('#blah')
                    .attr('src', e.target.result)
                    .width(150).height(200);
        };

        reader.readAsDataURL(input.files[0]);
        //console.log(reader);
        //alert(reader.readAsDataURL(input.files[0]));
    }
}
</script>

3voto

ihmar Points 11

J'avais utilisé ce qui suit qui a fonctionné correctement.

$('#fileAttached').attr('value', $('#attachment').val())

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