Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 466

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
У меня вопрос: как можно узнать размер файла, хранящегося в интернете?

P.S: нашел в гугле пару функций, но обе они возвращяют значение 2048.

IlluminatI Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: IlluminatI (статус: 2-ой класс)
Вопрос отправлен: 27 февраля 2009, 18:26
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, IlluminatI! Порылся в хелпах и нашел такой код:

//Как узнать размер файла в интернете?
uses wininet;
...
function GetUrlSize(const URL:string):integer;//результат в байтах
var
hSession,hFile:hInternet;
dwBuffer:array[1..20] of char;
dwBufferLen,dwIndex:DWORD;
begin
Result:=0;
hSession:=InternetOpen('GetUrlSize',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
if Assigned(hSession) then begin
hFile:=InternetOpenURL(hSession,PChar(URL),nil,0,INTERNET_FLAG_RELOAD,0);
dwIndex:=0;
dwBufferLen:=20;
if HttpQueryInfo(hFile,HTTP_QUERY_CONTENT_LENGTH,@dwBuffer,dwBufferLen,dwIndex) then
Result:=StrToInt(StrPas(@dwBuffer));
if Assigned(hFile) then InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
end;

Очень надеюсь, что мой ответ хоть чем-нибудь поможет вам:)

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 1 марта 2009, 09:20


Мини-форум вопроса

Всего сообщений: 8; последнее сообщение — 1 марта 2009, 10:31; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 27 февраля 2009, 18:39 [#1]:

Послать HEAD запрос. IdHttp и synapse это умеют. Но сервер не обязан присылать размер. Это не есть обязательное поле. Поэтому, в некоторых случаях размер будет неизвестным.
Галочка "подтверждения прочтения" - вселенское зло.
IlluminatI

IlluminatI (статус: 2-ой класс), 27 февраля 2009, 18:41 [#2]:

а можно поподробней как это сделать?
просто я эти названия первый раз слышу, в 10кл их не проходят)))
Вадим К

Вадим К (статус: Академик), 27 февраля 2009, 18:56 [#3]:

м....
а сложно догадаться написать строку idhttp1.head... ну и далее по контектсту.
Эта строка заберёт с сервера только заголовки. а так она идентична get запросу, которым бы скорее всего качали файл. Ну а после выполнения запроса, можно проверять поля компонента idHttp. там размер и запрятался. А даже и дата создания файла и другое, если сервер отдает корректно.
Галочка "подтверждения прочтения" - вселенское зло.
IlluminatI

IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:16 [#4]:

хорошо, попробую, какой модуль нужно для этого подключать?
Вадим К

Вадим К (статус: Академик), 27 февраля 2009, 19:18 [#5]:

намекаю тонко. поставить на форму компонент TIdHttp с пакета инди....
Галочка "подтверждения прочтения" - вселенское зло.
IlluminatI

IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:29 [#6]:

Ок =)
IlluminatI

IlluminatI (статус: 2-ой класс), 27 февраля 2009, 20:05 [#7]:

еще вопрос)) в каком поле искать данные и какого они типа?
Вадим К

Вадим К (статус: Академик), 1 марта 2009, 10:31 [#8]:

Ну, до сих пор никак?
  IdHTTP1.Head('http://somesite.ua');
  ShowMessage(inttostr(IdHTTP1.Response.ContentLength));
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.03 сек.