Можно ли при помощи 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, время: 04:28. |