Можно ли при помощи JS узнать размер файла(аудио), на клиенте?
Задача - узнать размер трека. Загружать не катит ибо файлов много. Это возможно?
(файлы на сервере) |
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); } |
Спасибо, то что нужно)
|
Цитата:
<input type="file" id="myfile" onchange="rdfile(this.files)"> <script> var reader = new FileReader(); function rdfile(files){ reader.readAsArrayBuffer(files[0]); reader.onload = function(e){ var arr=new Int8Array(e.target.result); alert("Ваш файл в байтах: " + arr.length); } } </script> |
Цитата:
Цитата:
Но если говорить о клиенте, то совершенно не нужно грузить весь файл в память, да ещё и пихать в массив, чтоб узнать его размер. Это сверхъизбыточно. <input type="file" id="myfile" onchange="alert(files[0].size)"> |
А вот просто alert(e.target.result.length); выдаёт undefined.
|
Опан, а должен что-то другое? Почитайте спецификацию, или ли хотя бы справку по методам и свойствам, не придётся городить извращения. У буффера например не "length", а "byteLength". Не знаю, честно говоря, нафига отошли от привычного стандарта, но наверное были некие веские причины.*с сомнением пожал плечами*
|
Часовой пояс GMT +3, время: 23:21. |