[Javascript] Ottieni le dimensioni del file prima del caricamento


Answers

<script type="text/javascript">
function AlertFilesize(){
    if(window.ActiveXObject){
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var filepath = document.getElementById('fileInput').value;
        var thefile = fso.getFile(filepath);
        var sizeinbytes = thefile.size;
    }else{
        var sizeinbytes = document.getElementById('fileInput').files[0].size;
    }

    var fSExt = new Array('Bytes', 'KB', 'MB', 'GB');
    fSize = sizeinbytes; i=0;while(fSize>900){fSize/=1024;i++;}

    alert((Math.round(fSize*100)/100)+' '+fSExt[i]);
}
</script>

<input id="fileInput" type="file" onchange="AlertFilesize();" />

Lavora su IE e FF

Question

C'è un modo per scoprire la dimensione del file prima di caricare il file utilizzando AJAX / PHP in caso di modifica del file di input?




La soluzione di ucefkh ha funzionato meglio, ma poiché $. browser era deprecato in jQuery 1.91, dovette cambiare per usare navigator.userAgent:

function IsFileSizeOk(fileid) {
try {
    var fileSize = 0;
    //for IE
    if (navigator.userAgent.match(/msie/i)) {
        //before making an object of ActiveXObject, 
        //please make sure ActiveX is enabled in your IE browser
        var objFSO = new ActiveXObject("Scripting.FileSystemObject"); var filePath = $("#" + fileid)[0].value;
        var objFile = objFSO.getFile(filePath);
        var fileSize = objFile.size; //size in kb
        fileSize = fileSize / 1048576; //size in mb 
    }
        //for FF, Safari, Opeara and Others
    else {
        fileSize = $("#" + fileid)[0].files[0].size //size in kb
        fileSize = fileSize / 1048576; //size in mb 
    }
    return (fileSize < 2.0);
}
catch (e) {
    alert("Error is :" + e);
}
}



Personalmente, direi che la risposta di World World è la migliore oggi, dati gli standard HTML. Se è necessario supportare IE <10, sarà necessario utilizzare una qualche forma di ActiveX. Eviterei le raccomandazioni che implicano la codifica di Scripting.FileSystemObject, o l'istanziazione diretta di ActiveX.

In questo caso, ho avuto successo usando librerie JS di terze parti come il plupload che può essere configurato per utilizzare i apis HTML5 oi controlli Flash / Silverlight per i browser di backfill che non supportano quelli. Plupload ha un'API lato client per il controllo della dimensione del file che funziona in IE <10.




I browser con supporto HTML5 hanno proprietà file per tipo di input. Questo ovviamente non funzionerà con versioni precedenti di IE.

var inpFiles = document.getElementById('#fileID');
for (var i = 0; i < inpFiles.files.length; ++i) {
    var size = inpFiles.files.item(i).size;
    alert("File Size : " + size);
}



Ho avuto lo stesso problema e sembra che non abbiamo avuto una soluzione accurata. Spero che questo possa aiutare le altre persone.

Dopo aver dedicato del tempo ad esplorare, ho finalmente trovato la risposta. Questo è il mio codice per ottenere il collegamento con jQuery:

var attach_id = "id_of_attachment_file";
var size = $('#'+attach_id)[0].files[0].size;
alert(size);

Questo è solo il codice di esempio per ottenere le dimensioni del file. Se vuoi fare altre cose, sentiti libero di cambiare il codice per soddisfare le tue esigenze.




Puoi usare la funzione PHP filesize. Durante il caricamento usando ajax, controlla prima la dimensione del file effettuando una richiesta ajax request allo script php che controlla il file e restituisce il valore.




Links