|
Вопрос # 2 466/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
У меня вопрос: как можно узнать размер файла, хранящегося в интернете?
P.S: нашел в гугле пару функций, но обе они возвращяют значение 2048.
 |
Вопрос задал: 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 (статус: 2-ой класс), 27 февраля 2009, 18:41 [#2]:
а можно поподробней как это сделать?
просто я эти названия первый раз слышу, в 10кл их не проходят)))
|
|
Вадим К (статус: Академик), 27 февраля 2009, 18:56 [#3]:
м....
а сложно догадаться написать строку idhttp1.head... ну и далее по контектсту.
Эта строка заберёт с сервера только заголовки. а так она идентична get запросу, которым бы скорее всего качали файл. Ну а после выполнения запроса, можно проверять поля компонента idHttp. там размер и запрятался. А даже и дата создания файла и другое, если сервер отдает корректно.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:16 [#4]:
хорошо, попробую, какой модуль нужно для этого подключать?
|
|
Вадим К (статус: Академик), 27 февраля 2009, 19:18 [#5]:
намекаю тонко. поставить на форму компонент TIdHttp с пакета инди....
Галочка "подтверждения прочтения" - вселенское зло.
|
|
IlluminatI (статус: 2-ой класс), 27 февраля 2009, 19:29 [#6]:
Ок =)
|
|
IlluminatI (статус: 2-ой класс), 27 февраля 2009, 20:05 [#7]:
еще вопрос)) в каком поле искать данные и какого они типа?
|
|
Вадим К (статус: Академик), 1 марта 2009, 10:31 [#8]:
Ну, до сих пор никак?
IdHTTP1.Head('http://somesite.ua');
ShowMessage(inttostr(IdHTTP1.Response.ContentLength));
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|