Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.08.2010, 12:40
Программер_Х
 
Сообщения: n/a
Счастье DOWNLOAD MA$TER :)

Код:
function Downl0ad_MasteR_XD(url:string; sfile:string) : string;
var
  IdHTTP: TIdHTTP;
  memorystream: TMemoryStream;
begin
result:= '';
  IdHTTP:=TIdHTTP.Create(nil);
  memorystream:=TMemoryStream.Create;
   try
    IdHTTP.Get(url, memorystream);
    memorystream.Position:=0;
    MemoryStream.SaveToFile(sfile);
   finally
    memorystream.Free;
    IdHTTP.Free;
  end;
result:=':)';
end;

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

буду благодарен

Последний раз редактировалось Программер_Х, 27.08.2010 в 12:45.
Ответить с цитированием
  #2  
Старый 27.08.2010, 12:46
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

В 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;
Пример использования:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
  begin
     i:=GetUrlSize('http://www.delphicode.ru/delphi.png');
     showmessage(inttostr(i));
  end;
__________________
Последний раз редактировалось Admin, Сегодня в 10:32.
Ответить с цитированием
  #3  
Старый 27.08.2010, 13:12
Программер_Х
 
Сообщения: n/a
Счастье

спасибо...
но если менять ссылку http://www.delphicode.ru/delphi.png на любую другую то пишет 0 и еще глючит((
Ответить с цитированием
  #4  
Старый 27.08.2010, 13:14
Программер_Х
 
Сообщения: n/a
Счастье

application.processmessages надо добавить где то
Ответить с цитированием
  #5  
Старый 27.08.2010, 14:04
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

Код:
begin
  idhttp1.Head('http://www.delphisources.ru/forum/images/misc/logo_ds_forum.gif');
  memo1.Text:= inttostr(idhttp1.Response.ContentLength);
  memo2.Text:= idhttp1.Response.RawHeaders.GetText;
end;
Ответить с цитированием
  #6  
Старый 27.08.2010, 14:27
Программер_Х
 
Сообщения: n/a
Счастье

Цитата:
Сообщение от pesi
Код:
begin
  idhttp1.Head('http://www.delphisources.ru/forum/images/misc/logo_ds_forum.gif');
  memo1.Text:= inttostr(idhttp1.Response.ContentLength);
  memo2.Text:= idhttp1.Response.RawHeaders.GetText;
end;

спасибо большое)) реально функция рулит!!! и даже не глючит прога))))
Код:
idhttp1.Response.RawHeaders.GetText;
//не только пишет размер файла)) но и куча информаций о серверЕ))))
Ответить с цитированием
  #7  
Старый 27.08.2010, 14:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

событие OnWorkBegin:
IdHTTP1.Response.ContentLength
что бы лишний HEAD не посылать
прогресс апдейтим в OnWork
OnWorkEnd - все, приехали

-- или --

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
// AWorkCountMax - ничего не напоминает?
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
// AWorkCount - а чтобы это значило?
end;

procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
// приехали
end;

Последний раз редактировалось NumLock, 27.08.2010 в 14:55.
Ответить с цитированием
  #8  
Старый 27.08.2010, 15:13
Программер_Х
 
Сообщения: n/a
Счастье

хех )
спасибо) я уже понял что сделать надо)
хороший прогрессбар получился у меня=))

Код:
procedure Tfrmmain.TButtonOnClick(Sender: TObject);
var MEMORYSTREAM: TMEMORYSTREAM;  
 fname:string;
  begin
  fname:='http://MunitSystems.h1.ru/TrojanHackPass_by_M-UNIT.exe';
  memorystream:=TMemoryStream.Create;
  idhttp1.Get(fname,memorystream);
  memorystream.Position:=0;
  MemoryStream.SaveToFile(extractfilename(fname));
  memorystream.free;
end;


procedure Tfrmmain.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin
progressbar1.Position:=aworkcount;
end;

procedure Tfrmmain.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Integer);
begin
showmessage('start:)');
progressbar1.max:=AWorkCountMax;
end;


procedure Tfrmmain.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
MemoLog.lines.add(astatustext);
end;


procedure Tfrmmain.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
showmessage('end:)');
end;

почти у любого компонента есть Work (End, Begin, Status и т.д.) ))


Последний раз редактировалось Программер_Х, 27.08.2010 в 15:24.
Ответить с цитированием
  #9  
Старый 27.08.2010, 15:25
Программер_Х
 
Сообщения: n/a
Счастье

а как узнать что с какой скоростью качается данный файл?
Ответить с цитированием
  #10  
Старый 27.08.2010, 15:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

в IdHTTP1WorkBegin запоминаешь в глобальной переменной значение GetTickCount
в IdHTTP1Work высчитываешь разницу между текущим GetTickCount и запомненным. делишь AWorkCount на эту разницу и получаешь среднюю скорость закачки в байт/мс (!) умножаешь на 1000 и делишь на 1024 получаешь в кб/с (надеюсь я не напутал что-то )
получить мгновенную скорость немного сложнее, но по похожему принципу.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter