jQuery: lấy tên tệp được chọn từ <input type = “file” />


90

Mã này sẽ hoạt động trong IE (thậm chí không kiểm tra nó trong Firefox), nhưng nó không. Những gì tôi muốn là hiển thị tên của tệp đính kèm. Bất kỳ giúp đỡ?

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

Kiểm tra câu trả lời của tôi, tôi tin rằng đó là cách tốt nhất và dễ hiểu nhất để đạt được điều này.
James111

Câu trả lời:


147

Nó chỉ đơn giản như viết:

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

Dù sao, tôi khuyên bạn nên sử dụng thuộc tính tên hoặc ID để chọn đầu vào của bạn. Và với sự kiện, nó sẽ trông như thế này:

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

Cảm ơn bạn! Điều đó đã hoạt động trên vấn đề trước đó (và đơn giản hóa) mà tôi đã đặt ra, nhưng nó không hoạt động trên phiên bản mở rộng.

làm thế nào để lấy được đường dẫn đầy đủ của tệp đoạn mã trên chỉ cho tên tệp.
Khurram Ijaz

3
@PHP Priest, bạn không thể. Trình duyệt không tiết lộ loại thông tin đó.
zneak,

2
@PHP Priest, nếu bạn có thể làm điều đó, bạn có thể lén lút truyền dữ liệu về hệ thống tệp của người dùng thông qua AJAX và người dùng có thể sẽ không bao giờ biết. Hãy tưởng tượng sẽ tệ hơn thế nào nếu bạn có thể đặt giá trị đầu vào tệp theo chương trình . Vâng. Vấn đề an ninh.
jinglesthula

1
Điều này có vẻ hơi cao hơn? Cách tôi đã liệt kê dễ hiểu và dễ hiểu hơn rất nhiều.
James111

20

Cách đơn giản nhất là chỉ cần sử dụng dòng sau jquery, sử dụng điều này, bạn không hiểu gì cả /fakepath, bạn sẽ lấy được tệp đã được tải lên:

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

Một số lệnh hữu ích khác là:

Để lấy tên của tệp:

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

Để lấy loại tệp:

Nếu tôi tải lên PNG, nó sẽ trả về image/png

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

Để lấy kích thước (tính bằng byte) của tệp:

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

Ngoài ra, bạn không phải sử dụng các lệnh này on('change', bạn có thể nhận các giá trị bất kỳ lúc nào, chẳng hạn như bạn có thể tải lên tệp và khi người dùng nhấp vào upload, bạn chỉ cần sử dụng các lệnh mà tôi đã liệt kê.


tại sao tôi gặp lỗi Không thể đọc thuộc tính 'name' của undefined?
Gagantous

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

Mã này sẽ không hiển thị C:\fakepath\trước tên tệp trong Google Chrome trong trường hợp sử dụng .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>

Cảm ơn! Điều này hữu ích trong việc lấy tên thực của tệp được tải lên chứ không phải đường dẫn đầy đủ.
Evan M

3

Tôi đã sử dụng sau đây mà hoạt động chính xác.

$('#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

Thêm nút đặt lại ẩn:

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

Nhấp vào nút đặt lại để xóa đầu vào.

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

1
Bạn có thể nhấp vào một nút ẩn?
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>

cảm ơn người đàn ông, tôi đã tìm kiếm điều này, tôi biết đây không phải là chủ đề nhưng đó là câu trả lời của tôi, bạn biết đấy;)
Tarek.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.