jQuery: отримати ім'я файлу, вибране з <input type = “file” />


90

Цей код повинен працювати в IE (навіть не тестувати його у Firefox), але це не так. Що я хочу, це відобразити ім'я вкладеного файлу. Будь-яка допомога?

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

Перевірте мою відповідь, я вважаю, що це найкращий і найбільш зрозумілий спосіб досягнення цього.
James111,

Відповіді:


147

Це просто так просто, як писати:

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

У будь-якому випадку, я пропоную використовувати атрибут name або ID для вибору вводу. А з подією це повинно виглядати так:

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

Дякую! Це працювало над попередньою (і спрощеною) проблемою, яку я поставив, але не працює з розширеною версією.

як отримати повний шлях до файлу, наведений вище код дає лише ім'я файлу.
Хуррам Іджаз,

3
@PHP Priest, ти не можеш. Браузери не надають такої інформації.
zneak

2
@PHP Priest, якби ти міг це зробити, ти міг би таємно передавати дані про файлову систему користувача за допомогою AJAX, і користувач, мабуть, ніколи не дізнався б про це. Уявіть, наскільки гірше було б, якби ви могли програмно встановити значення введення файлу. Так. Проблеми безпеки.
jinglesthula

1
Це здається трохи зверху? Я перерахував це набагато простіше і зрозуміліше.
James111,

20

Найпростіший спосіб - просто використовувати наступний рядок jquery, використовуючи це, ви не отримуєте /fakepathдурниць, ви просто отримуєте завантажений файл:

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

Деякі інші корисні команди:

Щоб отримати ім'я файлу:

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

Щоб отримати тип файлу:

Якби я завантажив PNG, він повернувся б image/png

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

Щоб отримати розмір (у байтах) файлу:

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

Крім того, вам не потрібно використовувати ці команди on('change', ви можете отримати значення в будь-який час, наприклад, у вас може бути завантаження файлу, і коли користувач натискає upload, ви просто використовуєте команди, перераховані мною.


чому я отримав помилку Не вдається прочитати властивість 'name' з undefined?
Гагант

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

Цей код не відображатиметься C:\fakepath\перед назвою файлу в Google Chrome у разі використання .val().


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

Дякую! Це було корисно для отримання фактичної назви завантаженого файлу, а не повного шляху.
Еван М,

3

Я використовував наступні, які працювали правильно.

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


1

Додайте приховану кнопку скидання:

<input id="Reset1" type="reset" value="reset" class="hidden" />

Натисніть кнопку скидання, щоб очистити введення.

$("#Reset1").click();

1
Чи можете ви натиснути приховану кнопку?
DaveWalley

-1
<input onchange="readURL(this);"  type="file" name="userfile" />
<img src="" id="viewImage"/>
<script>
 function readURL(fileName) {
    if (fileName.files && fileName.files[0]) {
        var reader = new FileReader();

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

        reader.readAsDataURL(fileName.files[0]);
    }
}
</script>

спасибі, я шукав це, я знаю, що це не тема, але це була моя відповідь, ти знаєш;)
Тарек. З радістю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.