JavaScript: получить размер файла изображения из элемента DOM, который загрузил его [duplicate]

Оба этих примера используют функцию стрелки () => { }, которая связывает this с контекстом, отличным от экземпляра Vue.

В соответствии с документацией :

Не используйте функции стрелок для свойства экземпляра или обратного вызова (например, vm.$watch('a', newVal => this.myMethod())). Поскольку функции стрелок привязаны к родительскому контексту, this не будет экземпляром Vue, как вы ожидали бы, и this.myMethod будет неопределенным.

Чтобы получить правильную ссылку к this в качестве экземпляра Vue используйте регулярную функцию:

mounted: function () {
  console.log(this);
}

В качестве альтернативы вы также можете использовать сокращение ECMAScript 5 для функции:

mounted() {
  console.log(this);
}

39
задан Lightness Races in Orbit 8 February 2012 в 16:23
поделиться

10 ответов

Изменить:

Чтобы получить текущий размер пикселя в браузере элемента DOM (в ваших IMG-элементах), за исключением границы и поля, вы можете использовать clientWidth и clientHeight .

var img = document.getElementById('imageId'); 

var width = img.clientWidth;
var height = img.clientHeight;

Теперь, чтобы получить размер файла, теперь я могу только думать о свойстве fileSize , которое Internet Explorer предоставляет для документа и IMG ...

Редактировать 2: Что-то приходит мне на ум ...

Чтобы получить размер файла, размещенного на сервере, вы можете просто сделать HEAD HTTP Request с помощью Ajax. Этот тип запроса используется для получения метаинформации о URL-адресе, подразумеваемом запросом, без передачи какого-либо его содержимого в ответ.

В конце HTTP-запроса у нас есть доступ к HTTP-заголовкам ответа, в том числе Content-Length , который представляет размер файла в байтах.

Основной пример использования raw XHR :

var xhr = new XMLHttpRequest();
xhr.open('HEAD', 'img/test.jpg', true);
xhr.onreadystatechange = function(){
  if ( xhr.readyState == 4 ) {
    if ( xhr.status == 200 ) {
      alert('Size in bytes: ' + xhr.getResponseHeader('Content-Length'));
    } else {
      alert('ERROR');
    }
  }
};
xhr.send(null);

Примечание. Имейте в виду, что когда вы выполняете запросы Ajax, вы ограничены той же политикой происхождения , которая позволяет делать запросы только в пределах одного домена.

Проверьте рабочее доказательство концепции здесь .

Редактирование 3:

1.) Что касается Content-Length, я думаю, что несоответствие размера может произойти для Например, если ответ сервера gzipped, вы можете сделать некоторые тесты, чтобы убедиться, что это происходит на вашем сервере.

2.) Для получения исходных размеров изображения вы можете создать элемент IMG программно, для пример:

var img = document.createElement('img');

img.onload = function () { alert(img.width + ' x ' + img.height); };

img.src='http://sstatic.net/so/img/logo.png';
69
ответ дан Christian 23 August 2018 в 18:08
поделиться

Вы можете получить размеры с помощью getElement(...).width и ...height.

Поскольку JavaScript не может получить доступ к чему-либо на локальном диске по соображениям безопасности, вы не можете изучать локальные файлы. Это также верно для файлов в кеше браузера.

Вам действительно нужен сервер, который может обрабатывать запросы AJAX. На этом сервере установите службу, которая загружает изображение и сохраняет поток данных в фиктивном выходе, который просто подсчитывает байты. Обратите внимание, что вы не можете всегда полагаться на поле заголовка Content-length , поскольку данные изображения могут быть закодированы. В противном случае было бы достаточно отправить запрос HTTP HEAD.

1
ответ дан Aaron Digulla 23 August 2018 в 18:08
поделиться

Вы можете найти размер изображения на странице, используя что-то вроде

document.getElementById('someImage').width

размера файла, однако вам придется использовать что-то серверное

0
ответ дан cobbal 23 August 2018 в 18:08
поделиться

Работники службы имеют доступ к информации заголовков, включая заголовок Content-Length.

Работники служб немного сложно понять, поэтому я создал небольшую библиотеку под названием sw-get- заголовки .

Чем вам нужно:

  1. подписаться на событие response в библиотеке
  2. , чтобы определить URL-адрес изображения среди всех сетевые запросы
  3. здесь вы можете прочитать заголовок Content-Length!

Обратите внимание, что ваш веб-сайт должен быть на HTTPS для использования Служащих, чтобы быть совместимыми с Работодателями Службы, и изображения должны быть в том же самом происхождении, что и ваша страница.

2
ответ дан Gaël Métais 23 August 2018 в 18:08
поделиться

Проверьте размер загруженного изображения с помощью Javascript

<script type="text/javascript">
    function check(){
      var imgpath=document.getElementById('imgfile');
      if (!imgpath.value==""){
        var img=imgpath.files[0].size;
        var imgsize=img/1024; 
        alert(imgsize);
      }
    }
</script>

Код HTML

<form method="post" enctype="multipart/form-data" onsubmit="return check();">
<input type="file" name="imgfile" id="imgfile"><br><input type="submit">
</form>
9
ответ дан MR Kesavan 23 August 2018 в 18:08
поделиться

Получение исходных размеров изображения

Если вам нужно получить исходные размеры изображения (не в контексте браузера), свойства clientWidth и clientHeight не работают, поскольку они возвращают неправильные значения, если изображение растягивается / сокращается через css.

Чтобы получить исходные размеры изображения, используйте свойства naturalHeight и naturalWidth .

var img = document.getElementById('imageId'); 

var width = img.naturalWidth;
var height = img.naturalHeight;

стр. s. Это не отвечает на исходный вопрос, так как принятый ответ выполняет эту работу. Это вместо этого служит дополнением к нему.

2
ответ дан Niket Pathak 23 August 2018 в 18:08
поделиться

Большинство людей ответили, как размеры загруженного изображения могут быть известны, поэтому я просто попытаюсь ответить на другую часть вопроса - зная размер файла загруженного изображения.

Вы можете сделать это, используя время ресурса апи. В частности, для этой цели могут быть использованы свойства transferSize, encodedBodySize и decodedBodySize.

Посмотрите мой ответ здесь для фрагмента кода и дополнительной информации, если вы ищете: JavaScript - получить размер в байтах из HTML img src

0
ответ дан Punit S 23 August 2018 в 18:08
поделиться

Единственное, что вы можете сделать, это загрузить изображение на сервер и проверить размер и размер изображения, используя некоторый язык на стороне сервера, например C #.

Изменить:

Ваша потребность не может быть сделано с использованием только javascript.

-4
ответ дан rahul 23 August 2018 в 18:08
поделиться
var img = new Image();
img.src = sYourFilePath;
var iSize = img.fileSize;
-2
ответ дан sjngm 23 August 2018 в 18:08
поделиться

Как насчет этого:

var imageUrl = 'https://cdn.sstatic.net/Sites/stackoverflow/img/sprites.svg';
var blob = null;
var xhr = new XMLHttpRequest(); 
xhr.open('GET', imageUrl, true); 
xhr.responseType = 'blob';
xhr.onload = function() 
{
    blob = xhr.response;
    console.log(blob, blob.size);
}
xhr.send();

http://qnimate.com/javascript-create-file-object-from-url/

из-за той же политики происхождения, работают только с тем же происхождением

1
ответ дан White Wang 23 August 2018 в 18:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: