Ottieni le dimensioni del file prima del caricamento [javascript]


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?




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.




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



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






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