Máy khách Kiểm tra kích thước tệp bằng HTML5?


84

Tôi đang cố gắng vượt qua làn sóng HTML5 nhưng tôi đang gặp phải một vấn đề nhỏ. Trước HTML5, chúng tôi đã kiểm tra kích thước tệp bằng flash nhưng bây giờ xu hướng là tránh sử dụng flash trong các ứng dụng web. Có cách nào để kiểm tra kích thước tệp ở phía máy khách bằng HTML5 không?

Câu trả lời:


126

Những công việc này. Đặt nó bên trong trình nghe sự kiện khi đầu vào thay đổi.

if (typeof FileReader !== "undefined") {
    var size = document.getElementById('myfile').files[0].size;
    // check file size
}

Nó hoạt động với tôi trên IE 10, Mozilla FFx và Chrome. Cảm ơn!
Rahnzo

hoạt động tốt, chỉ là bạn không sử dụng nó đúng cách; đăng nhập vào sự kiện thay đổi của đầu vào và bạn sẽ ổn.
dandavis,

@dandavis Tôi đang sử dụng mã trong câu trả lời. Nếu mã hoạt động tốt, tại sao tôi cần thay đổi mã?
Chuck Lê Butt

1
@Chuck ví dụ của bạn không hoạt động vì bạn cố đọc danh sách tệp khi tải trang, trước khi chọn bất kỳ tệp nào.
khoảng

1
@Chuck: ok, nó hoạt động tốt, và bạn đã dán nó ok, nhưng chỉ nó là không đủ. nếu bạn chạy nó trong bảng điều khiển sau khi điền tệp, bạn sẽ thấy nó hoạt động tốt. đối với ứng dụng, bảng điều khiển là không tốt, vì vậy bạn nên đặt mã trong một sự kiện chạy sau khi đầu vào được điền, để mã sẽ hoạt động như mong đợi. xin lỗi vì sự hiểu lầm.
dandavis,

33

Câu trả lời được chấp nhận thực sự là đúng, nhưng bạn cần phải liên kết nó với một trình xử lý sự kiện để nó sẽ cập nhật khi đầu vào tệp được thay đổi.

document.getElementById('fileInput').onchange = function(){
    var filesize = document.getElementById('fileInput').files[0].size;
    console.log(filesize);    
}

Nếu bạn đang sử dụng thư viện jQuery thì đoạn mã sau có thể hữu ích

$('#fileInput').on('change',function(){
  if($(this).get(0).files.length > 0){ // only if a file is selected
    var fileSize = $(this).get(0).files[0].size;
    console.log(fileSize);
  }
});

Cho rằng việc chuyển đổi kích thước tệp để hiển thị theo số liệu nào là tùy thuộc vào bạn.


Ví dụ jQuery của bạn không hoạt động. Dường như bạn không thể sử dụng jQuery với .files: jsfiddle.net/edxvo4wa (Tôi đã tự phát hiện ra điều này khi tôi tìm ra giải pháp - nó hoạt động nếu bạn thay đổi nó thành document.getElementById).
Chuck Lê Butt

1
@Chuck xin lỗi vì những lỗi đó, tôi đã cập nhật câu trả lời của tôi với một làm việc
Ammadu


3

Cá nhân tôi sẽ chọn định dạng này:

    $('#inputFile').bind('change', function(e) {
      var data = e.originalEvent.target.files[0];
      // and then ...
      console.log(data.size + "is my file's size");
      // or something more useful ...
      if(data.size < 500000) {
        // what your < 500kb file will do
      }
    }

1
Tôi tin rằng 500kb thực sự sẽ là 500 * 1024. Không phải là vấn đề lớn, nhưng người dùng cuối với tệp 500.000b sẽ xem nó là 488kb và từ chối. Và đây bắt đầu sự thất vọng lớn
Apolo

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.