Клієнт Перевірка розміру файлу за допомогою HTML5?


84

Я намагаюся подолати хвилю HTML5, але стикаюся з невеликою проблемою. До HTML5 ми перевіряли розмір файлу за допомогою flash, але зараз тенденція полягає в тому, щоб уникати використання Flash у веб-програмах. Чи є спосіб перевірити розмір файлу на стороні клієнта за допомогою HTML5?

Відповіді:


126

Це працює. Помістіть його всередину прослуховувача подій, коли вхід зміниться.

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

Мені це працює в IE 10, Mozilla FFx та Chrome. Дякую!
Ранцо

працює нормально, ви просто використовуєте його неправильно; увійдіть до події onchange вводу, і у вас все буде добре.
dandavis

@dandavis Я використовую код у відповіді. Якщо код працює нормально, чому мені потрібно його змінювати?
Чак Ле Батт

1
@Chuck ваш приклад не працює, оскільки ви намагаєтесь прочитати список файлів при завантаженні сторінки, перш ніж вибрати будь-який файл.
приблизно сірий

1
@Chuck: гаразд, він працює нормально, і ти все-таки вставив його нормально, але одного цього недостатньо. якщо ви запустили його в консолі після заповнення файлу, ви побачите, що він працює нормально. для програм консоль не годиться, тому вам слід помістити код у подію, яка запускається після заповнення введення, щоб він працював, як очікувалося. вибачте за непорозуміння.
dandavis

33

Прийнята відповідь насправді є правильною, але вам потрібно прив’язати її до прослуховувача подій, щоб вона оновлювалась, коли будь-коли змінюється введення файлу.

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

Якщо ви використовуєте бібліотеку jQuery, то наступний код може стати в нагоді

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

Враховуючи, що перетворення файлуРозмір для відображення, в якому коли-небудь показник, залежить від вас.


Ваш приклад jQuery не працює. Ви, схоже, не можете використовувати jQuery з .files: jsfiddle.net/edxvo4wa (я це виявив сам, коли придумував рішення - воно працює, якщо ви його зміните на document.getElementById).
Чак Ле Батт

1
@Chuck вибачте за помилку там, я оновив свою відповідь робочою
Ammadu

7

HTML5 fie api підтримує перевірку розміру файлу.

прочитайте цю статтю, щоб отримати більше інформації про файл api

http://www.html5rocks.com/en/tutorials/file/dndfiles/

<input type="file" id="fileInput" />


var size = document.getElementById("fileInput").files[0].size;

аналогічно API файлу дає ім'я та тип.


3

Особисто я вибрав би такий формат:

    $('#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
Я вважаю, що 500 кб насправді було б 500 * 1024. Не біда, але кінцевий користувач із файлом 500 000 б побачив би його як 488 кб і відмовився. І тут починається велике розчарування
Аполо

2

"немає простого рішення для крос-браузерного досягнення цього": виявлення розміру завантаженого файлу на стороні клієнта?


10
Додайте також перевірку розміру сервера, але ви можете також заощадити біль у сучасних браузерах і перевірити його на стороні клієнта.
El Yobo,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.