Client Verifica la dimensione del file utilizzando HTML5?


85

Sto cercando di cavalcare l'onda HTML5 ma sto affrontando un piccolo problema. Prima di HTML5 stavamo controllando le dimensioni del file con Flash, ma ora la tendenza è quella di evitare di utilizzare Flash nelle app web. Esiste un modo per controllare la dimensione del file sul lato client utilizzando HTML5?

Risposte:


128

Funziona. Inseriscilo in un listener di eventi per quando l'input cambia.

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

Funziona con IE 10, Mozilla FFx e Chrome. Grazie!
Rahnzo

funziona bene, semplicemente non lo stai usando correttamente; accedi all'evento onchange dell'input e starai bene.
dandavis

@dandavis sto usando il codice nella risposta. Se il codice funziona correttamente, perché devo cambiarlo?
Chuck Le Butt

1
@Chuck il tuo esempio non funziona perché provi a leggere l'elenco dei file al caricamento della pagina, prima di selezionare qualsiasi file.
approxiblue

1
@ Chuck: ok, funziona benissimo, e l'hai incollato bene, ma da solo non è sufficiente. se lo avessi eseguito nella console dopo aver popolato il file, lo vedresti funzionare bene. per le app, la console non va bene, quindi dovresti inserire il codice in un evento che viene eseguito dopo che l'input è stato popolato, quindi funzionerà come previsto. scusa per il fraintendimento.
dandavis

33

La risposta accettata è effettivamente corretta, ma è necessario associarla a un listener di eventi in modo che venga aggiornato ogni volta che viene modificato l'input del file.

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

Se stai usando la libreria jQuery, il seguente codice potrebbe tornare utile

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

Dato che la conversione del fileSize da visualizzare in qualsiasi metrica dipende da te.


Il tuo esempio jQuery non funziona. Non sembra che tu sia in grado di usare jQuery con .files: jsfiddle.net/edxvo4wa (l'ho scoperto da solo quando stavo cercando una soluzione - funziona se lo cambi in document.getElementById).
Chuck Le Butt

1
@Chuck scusa per l'errore lì, ho aggiornato la mia risposta con quella funzionante
Ammadu

7

L'API fie HTML5 supporta la verifica della dimensione del file.

leggi questo articolo per avere maggiori informazioni su file api

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

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


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

allo stesso modo l'API file fornisce nome e tipo.


3

Personalmente, opterei per questo formato:

    $('#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
Credo che 500kb sarebbe effettivamente 500 * 1024. Non è un grosso problema, ma l'utente finale con un file da 500.000b lo vedrebbe come 488kb e rifiutato. E qui inizia la grande frustrazione
Apolo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.