[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);
}
}






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.




Si prega di non utilizzare ActiveX poiché è probabile che visualizzi un messaggio di avviso spaventoso in Internet Explorer e scoraggi gli utenti.

Se qualcuno vuole implementare questo controllo, dovrebbe fare affidamento solo sull'oggetto FileList disponibile nei browser moderni e fare affidamento sui controlli lato server solo per i browser più vecchi ( miglioramento progressivo ).

function getFileSize(fileInputElement){
    if (!fileInputElement.value ||
        typeof fileInputElement.files === 'undefined' ||
        typeof fileInputElement.files[0] === 'undefined' ||
        typeof fileInputElement.files[0].size !== 'number'
    ) {
        // File size is undefined.
        return undefined;
    }

    return fileInputElement.files[0].size;
}



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);
}