HEAD запросом, если сервер отдаёт размер. Примерно так
function getFileSize(url, callback){
function promise(resolve){
var req = new XMLHttpRequest();
req.open('HEAD', url, true);
req.onreadystatechange = () => {
if(req.readyState === 2){
var size = req.getResponseHeader('Content-Length');
if(!size){
if (size = /\bsize=([^;]+)/.exec(req.getResponseHeader('Content-Disposition')))
size = size[1];
}
req.abort(); //чтоб не грузил лишнего
resolve(+size || 0);
}
};
req.onerror = req.ontimeout = () => resolve(0);
req.send(null);
}
if(callback) return promise(callback);
return new Promise(promise);
}