Получить размер изображения без загрузки его с веб-сервера

Можно ли получить размер изображения (возможно, его размер в байтах) с веб-сервера, не загружая его?

Имеют ли веб-серверы доступные свойства (поля) в отношении файла размеры? Это позволило бы проверить размер изображения без загрузки.

Часто, когда каталог веб-сервера загружается в браузер, он сообщает вам размер каждого файла со стороны сервера. Могу ли я, как разработчик ASP, получить доступ к этим данным вообще?

Я использую C # .Net 4

Редактировать: Я действую как клиент и запрашиваю эту информацию у других веб-серверов.

Ценю любые помогите, как всегда.

Можно ли получить размер изображения (возможно, его размер в байтах) с веб-сервера без его загрузки?

Имеют ли веб-серверы доступные свойства (поля) в отношении размеров файлов? Это позволило бы проверить размер изображения без загрузки.

Часто, когда каталог веб-сервера загружается в браузер, он сообщает вам размер каждого файла со стороны сервера. Могу ли я, как разработчик ASP, получить доступ к этим данным вообще?

Я использую C # .Net 4

Редактировать: Я действую как клиент и запрашиваю эту информацию у других веб-серверов.

Ценю любые помогите, как всегда.

Можно ли получить размер изображения (возможно, его размер в байтах) с веб-сервера без его загрузки?

Имеют ли веб-серверы доступные свойства (поля) в отношении размеров файлов? Это позволило бы проверить размер изображения без загрузки.

Часто, когда каталог веб-сервера загружается в браузер, он сообщает вам размер каждого файла со стороны сервера. Могу ли я, как разработчик ASP, получить доступ к этим данным вообще?

Я использую C # .Net 4

Редактировать: Я действую как клиент и запрашиваю эту информацию у других веб-серверов.

Ценю любые помогите, как всегда. он сообщает вам размер каждого файла со стороны сервера. Могу ли я, как разработчик ASP, получить доступ к этим данным вообще?

Я использую C # .Net 4

Редактировать: Я действую как клиент и запрашиваю эту информацию у других веб-серверов.

Ценю любые помогите, как всегда. он сообщает вам размер каждого файла со стороны сервера. Могу ли я, как разработчик ASP, получить доступ к этим данным вообще?

Я использую C # .Net 4

Редактировать: Я действую как клиент и запрашиваю эту информацию у других веб-серверов.

Ценю любые помогите, как всегда. Алекс

8
задан Alex 17 August 2010 в 01:21
поделиться

3 ответа

Вы имеете в виду, когда вы сервер или клиент?

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

new FileInfo(path).Length;

Если вы имеете в виду, что выполняете клиентский код (вы получаете доступ к другому веб-серверу)

Выполните запрос HEAD. Хотя некоторые серверы работают некорректно, правильный ответ на HEAD практически идентичен ответу на GET, за исключением того, что объект не отправляется.

Например, чтобы получить PNG спрайта, который используется на этой странице, браузер выполняет GET на http://sstatic.net/stackoverflow/img/sprites.png , что приводит к ответу :

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Aug 2010 01:06:21 GMT
Content-Type: image/png
Connection: keep-alive
Cache-Control: max-age=604800
Last-Modified: Tue, 13 Jul 2010 06:28:14 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET
Content-Length: 18607

, за которым следуют октеты фактического файла изображения.

Выполнение HEAD вместо get приводит к:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 17 Aug 2010 01:07:20 GMT
Content-Type: image/png
Connection: keep-alive
Cache-Control: max-age=604800
Content-Length: 18607
Last-Modified: Tue, 13 Jul 2010 06:28:14 GMT
Accept-Ranges: bytes
X-Powered-By: ASP.NET

почти то же самое , но без тела объекта . На данный момент мы видим, что размер изображения составляет 18607 байт, без фактической загрузки.Этот метод не будет работать, если изображение будет отправлено по частям, поскольку тогда длина содержимого не будет отправлена ​​в заголовке.

Редактировать:

Стоит отметить, что иногда с фрагментированным контентом у вас не будет другого выбора, кроме как загрузить все это целиком, потому что сервер не скажет (и может даже не знать) размер, когда он начнет отправку. К сожалению, это, вероятно, будет использоваться и с особенно большими потоками. К счастью, это вряд ли будет использоваться с изображениями.

11
ответ дан 5 December 2019 в 12:06
поделиться
System.IO.FileInfo fi = new System.IO.FileInfo(filepath);
fi.Length();

Psst, просто подсказка: http: / /www.google.ca/#hl=en&source=hp&q=c%23+get+file+size&aq=f&aqi=g4g-m2&aql=&oq=&gs_rfai=&fp=e6a957a020d2d8f6

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

Если Content-Length отсутствует, я почти уверен, что нет способа определить размер файла через HTTP без его загрузки. Заголовки Content-Length используются именно для этого.

2
ответ дан 5 December 2019 в 12:06
поделиться

Есть много веб-серверы, которые не обслуживают поле Content-Length. Вам нужно будет убедиться, что ваш код терпим к этому.

1
ответ дан 5 December 2019 в 12:06
поделиться
Другие вопросы по тегам:

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