jQuery: <input type = "dosya" /> seçeneğinden seçilen dosya adını alın


90

Bu kod IE'de çalışmalıdır (Firefox'ta bile test etmeyin), ancak işe yaramıyor. İstediğim, ekli dosyanın adını görüntülemek. Herhangi bir yardım?

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

Cevabımı kontrol edin, bence bunu başarmanın en iyi ve en anlaşılır yolu.
James111

Yanıtlar:


147

Yazmak kadar basit:

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

Her neyse, girişinizi seçmek için ad veya kimlik özelliğini kullanmanızı öneririm. Ve olayla birlikte şöyle görünmelidir:

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

Teşekkür ederim! Bu, oluşturduğum önceki (ve basitleştirilmiş) sorunda işe yaradı, ancak genişletilmiş sürümde çalışmıyor.

dosyanın tam yolu nasıl alınır yukarıdaki kod sadece dosya adını verir.
Khurram Ijaz

3
@PHP Priest, yapamazsınız. Tarayıcılar bu tür bilgileri ifşa etmez.
zneak

2
@PHP Priest, eğer bunu yapabilirseniz, AJAX aracılığıyla kullanıcının dosya sistemi hakkında gizlice veri aktarabilirsiniz ve kullanıcı muhtemelen asla bilemez. Bir dosya girdisinin değerini programlı olarak ayarlayabilseniz ne kadar kötü olacağını bir düşünün . Evet. Güvenlik sorunları.
jinglesthula

1
Bu biraz fazla görünüyor mu? Listeleme şeklim çok daha kolay ve anlaşılır.
James111

20

En basit yol, basitçe aşağıdaki satırı kullanmaktır, jquerybunu kullanarak /fakepathsaçmalığı almazsınız, doğrudan yüklenen dosyayı alırsınız:

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

Diğer bazı yararlı komutlar şunlardır:

Dosyanın adını almak için:

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

Dosyanın türünü öğrenmek için:

Bir PNG yükleseydim, geri dönerdi image/png

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

Dosyanın boyutunu (bayt cinsinden) almak için:

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

Ayrıca bu komutları kullanmak zorunda değilsiniz on('change', değerleri istediğiniz zaman alabilirsiniz, örneğin bir dosya yüklemeniz olabilir ve kullanıcı tıkladığında uploadsadece listelediğim komutları kullanırsınız.


neden tanımsız 'adı' özelliği okunamıyor hatası aldım?
Gagantous

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

Bu kod C:\fakepath\, kullanılması durumunda Google Chrome'da dosya adından önce gösterilmeyecektir .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>

Teşekkürler! Bu, yüklenen dosyanın tam yolunu değil gerçek adını almada yardımcı oldu.
Evan M

3

Doğru çalışan aşağıdakileri kullandım.

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

2
//get file input
var $el = $('input[type=file]');
//set the next siblings (the span) text to the input value 
$el.next().text( $el.val() );

1

Gizli bir sıfırlama düğmesi ekleyin:

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

Girişi temizlemek için sıfırla düğmesine tıklayın.

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

1
Gizli bir düğmeyi tıklayabilir misin?
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>

teşekkürler dostum bunu arıyordum biliyorum konu bu değil ama cevabım
buydu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.