Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Вниз

Получение размера удалённого файла без его скачивания.   Найти похожие ветки 

 
Maks Realov   (2003-08-06 14:15) [0]

Как программно получить размер файла, который лежит на www.somesite.com/dir, т.е. www.somesite.com/dir/file1.zip ?
Естественно, без предварительного скачивания данного файла.

Спасибо.


 
Е-Моё имя   (2003-08-06 14:36) [1]

метод http HEAD
получает заголовки, там есть длина ресурса, если ее можно вычислить


 
Anatoly Podgoretsky   (2003-08-06 14:40) [2]

А может у него ftp протокол или расшаренная папка.


 
Maks Realov   (2003-08-06 14:45) [3]

Вообще говоря, я пользуюсь функцией URLDownloadToFile для скачивания файлов. Так что качаю через http протокол. Это так - к сведению.


 
xShadow   (2003-08-06 15:29) [4]

Function GetUrlInfo( const FileURL: String ): Integer;
var hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
Begin
Result := 0;
hSession := InternetOpen( "xShadow downlaod inf", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned( hSession ) then
Begin
hFile := InternetOpenURL( hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo( hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
Begin
TempS := StrPas( dwBuffer );
Result := StrToInt( TempS );
end;
if Assigned( hFile ) then InternetCloseHandle(hFile);
( hsession)
Function GetUrlInfo( const FileURL: String ): Integer;
var hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
Begin
Result := 0;
hSession := InternetOpen( "xShadow downlaod inf", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned( hSession ) then
Begin
hFile := InternetOpenURL( hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo( hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
Begin
TempS := StrPas( dwBuffer );
Result := StrToInt( TempS );
end;
if Assigned( hFile ) then InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
end;


Вот кусок должен работать его предназначение вернуть размер http ссылки или файла. Проверялось только на файлах


 
Е-Моё имя   (2003-08-06 16:04) [5]

Anatoly Podgoretsky © (06.08.03 14:40)

о типе сервера судил по приведенному примеру адреса
типичный http адрес )


 
Maks Realov   (2003-08-06 16:30) [6]

xShadow:

HttpQueryInfo всегда возвращает False, а GetLastError даёт значение 12150.


 
xShadow   (2003-08-06 16:32) [7]

Maks Realov
Это про код который я привёл ?
А остальные параметры какие??
Есть ли прокси сервер? Постоянно ли ты подключен к инету ?


 
Maks Realov   (2003-08-06 16:33) [8]

В WinError.h:
#define ERROR_INVALID_SHARENAME 1215L

Я задаю URL так: http://mysrv.serv.ru/myfile.zip


 
xShadow   (2003-08-06 16:34) [9]

Maks Realov
Это про код который я привёл ?
А остальные параметры какие??
Есть ли прокси сервер? Постоянно ли ты подключен к инету ?


 
xShadow   (2003-08-06 16:34) [10]

Пардон глюки :(
Проксю есть?


 
Anatoly Podgoretsky   (2003-08-06 16:44) [11]

Е-Моё имя © (06.08.03 16:04)
Часто встречаю расшаренные папки идаже с полным доступом, так что по приведенному адресу судить нельзя, вот если бы было написано с указанием протокола http://www.somesite.com/dir/file1.zip то тогда бы вопроса не возникло.


 
Maks Realov   (2003-08-06 16:46) [12]

Да, про этот код.
А какие остальные параметры?
Прокся есть, но она для меня прозрачна, т.е. я напрямую обращаюсь к 80-му порту. В IE никаких спец. настроек нет.


 
Aleksey Pavlov   (2003-08-06 16:52) [13]

>>Maks Realov:
Бага тривиальная память невыделена у тебя:

function GetUrlInfo(const FileURL: String): Integer;
var
hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
begin
Result:= 0;
dwBuffer:= StrAlloc(255*SizeOf(Char));
hSession:= InternetOpen("WebClient", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hSession) then
begin
hFile:= InternetOpenURL(hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex:= 0;
dwBufferLen:= 20;
if HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
begin
TempS:= StrPas(dwBuffer);
Result:= StrToInt(TempS);
end;
ShowMessage(IntToStr(GetLastError));
if Assigned(hFile) then
InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
StrDispose(dwBuffer);
end;


 
Anatoly Podgoretsky   (2003-08-06 16:58) [14]

xShadow © (06.08.03 16:32)
Остальное не важно, требуется обращение к серверу с коандой HEAD, что и делается через WinInet.dll функцией HttpQueryInfo, это уже с разбором заголовка.

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


 
Е-Моё имя   (2003-08-06 17:14) [15]

Anatoly Podgoretsky © (06.08.03 16:44)
гыыы))
бывает же такое)



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.01 c
1-3958
Sour
2003-09-20 09:30
2003.10.02
Тащи-Кидай из DBGrid


1-3992
GhostDog
2003-09-11 20:42
2003.10.02
Фильтры


4-4156
Сергей Ю.
2003-07-29 20:05
2003.10.02
Отключение от сети


1-3822
ДмитрийК
2003-09-19 09:12
2003.10.02
Сохранение ширины столбцов в DBGrid-е


1-3897
Dev
2003-09-18 14:15
2003.10.02
Работа с DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский