JavaScript-получить размер в байтах из HTML img src
Я хотел бы знать, как получить размер в байтах из "src" из тега "img" с HTML/JS.
<img src="https://ofbuckleyandbeatles.files.wordpress.com/2011/01/testpattern.gif"/>
в приведенном выше примере я бы в основном хотел знать, насколько велик " testpattern.gif " (в байтах).
спасибо заранее.
2 ответов
Javscript является чистым скриптом на стороне клиента, и если вы спросите меня, можем ли мы получить размер изображения только с помощью javascript, чем мой ответ "нет". Даже если вы запустите файлы локально, вы не сможете получить размер файла.
XMLHttpRequest object
var obj = new XMLHttpRequest();
obj.open('HEAD', 'image path', true);
obj.onreadystatechange = function(){
if ( obj.readyState == 4 ) {
if ( obj.status == 200 ) {
alert('Size in bytes: ' + obj.getResponseHeader('Content-Length'));
} else {
alert('ERROR');
}
}
};
obj.send(null);
Это в основном используется для отправки http или https запросить сервер за сценой и загрузить ответ обратно в сценарий. Это поддерживается современными браузеры, более старые, использовали аналогичный, называемый ActiveXObject. The onReadyStateChange
событие имеет свои 5 готовых этапов.
- 0=запрос не инициализирован
- 1=установлено соединение с сервером
- 2=запрос получен
- 3=запрос на обработку
- 4=обработка завершена, и ответ готов
.
Ну, это 2017, и теперь вы можете использовать API синхронизации ресурсов для извлечения transferSize изображения, encodedBodySize, decodedBodySize в javascript:
Ниже приведен код для доступа к информации о размере для все imgs на странице (см. предостережение ко всем ниже):
var imgElems = document.getElementsByTagName('img');
for ( var i=0, len = imgElems.length; i < len; i++ )
{
var url = imgElems[i].src || imgElems[i].href;
if (url && url.length > 0)
{
var iTime = performance.getEntriesByName(url)[0];
console.log(iTime.transferSize); //or encodedBodySize, decodedBodySize
}
}
- убедитесь, что вы запустите вышеуказанный код после загрузки документа (чтобы убедиться, что изображения загружены)
- из-за CORS, информация о времени для изображений, поступающих из другого домен может быть недоступен (если сервер другого домена не установил заголовок HTTP-ответа Timing-Allow-Origin)
- убедитесь, что api синхронизации ресурсов доступен для браузера(ов), который вы нацеливаете:http://caniuse.com/#feat=resource-timing
- убедитесь, что вы понимаете разницу между transferSize, encodedBodySize, decodedBodySize, чтобы убедиться, что вы используете правильный атрибут размера.