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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.06.2014, 00:19
Jekaokay Jekaokay вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 2
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Downloader из любого проекта Delphi

Код:
unit Unit1;

interface

uses
  Winapi.Windows, ShellAPI, idHTTP, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, Vcl.StdCtrls, sButton;

type
  TForm1 = class(TForm)
    sButton1: TsButton;
    IdHTTP1: TIdHTTP;
    procedure sButton1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.sButton1Click(Sender: TObject);
var
  idHTTP1: TIdHTTP;
  Stream:TMemoryStream;
begin

try
idHTTP1 := TIdHTTP.Create(nil);
Stream:=TMemoryStream.Create;
IdHTTP1.Get('http://site.ru/file.exe',Stream); // получаем файл из интернета
Stream.SaveToFile('C:\file.exe'); // сохраняем его
Stream.Free; // память - это святое
ShellExecute(0,'open','C:\Windows\Temp\file.exe',nil,nil,SW_NORMAL); // запускаем
except // если ошибки или нет доступа в интернет то завершаем работу нашей программы
// Halt;
Application.Terminate;
end;

end;

end.

Проблема при скачке файла (ломается файл)

Последний раз редактировалось lmikle, 24.06.2014 в 07:23.
Ответить с цитированием
  #2  
Старый 24.06.2014, 01:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Уберите из IdHTTP.Get кусок текста с "http://"
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Jekaokay (24.06.2014)
  #3  
Старый 24.06.2014, 01:43
Jekaokay Jekaokay вне форума
Прохожий
 
Регистрация: 24.06.2014
Сообщения: 2
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Благодарю, но не помогло. если убрать "Http://", то вообще не происходит закачки фаила
Ответить с цитированием
  #4  
Старый 24.06.2014, 01:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Дело было так
Цитата:
Сообщение от Drkb 03587
...Так вот, чтобы написать эту прогу, мне пришлось основательно помучаться: я не знал, ни как закачать файлы по фтп, ни как закачать его по хттп. Но если с фтп, перерыв борландовский хелп и примеры, я разобрался, то хттп постоянно глючил, выдавал битый файл. Я написал в десяток ньюсгрупп - как русских, так и забугорных, задавал вопросы на бордах крутых дельфовских сайтов, я писал программерам... И что ты думаешь, кто-нибудь посоветовал что-нибудь путевое? Фиг!

Я дошел сам. А дело было в мелочи: я делал все правильно, но писал

nmhttp.get('http://www.host.com/file.zip') ;

А нужно было

nmhttp.get('www.host.com/file.zip') ;...
от-туда же 03577, возможно тоже не рабочий
Код:
function DownloadFile(const Url: string): string;
var
NetHandle, UrlHandle: HINTERNET;
Buffer: array[0..1024] of char;
BytesRead: cardinal;
begin
Result := '';
NetHandle := InternetOpen('Delphi 5.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

if Assigned(NetHandle) then
   begin
     UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);

     if Assigned(UrlHandle) then

{ UrlHandle правильный? Начинаем загрузку }
       begin
         FillChar(Buffer, SizeOf(Buffer), 0);

         repeat

           Result := Result + Buffer;
           FillChar(Buffer, SizeOf(Buffer), 0);
           InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
         until BytesRead = 0;
         InternetCloseHandle(UrlHandle);
       end
     else
       begin

{ UrlHandle неправильный. Генерируем исключительную ситуацию. }
         raise Exception.CreateFmt('Cannot open URL %s', [url]);
       end;

     InternetCloseHandle(NetHandle);
   end
else
{ NetHandle недопустимый. Генерируем исключительную ситуацию }
   raise Exception.Create('Unable to initialize Wininet');
end;
Ответить с цитированием
  #5  
Старый 24.06.2014, 18:19
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  AStream: TFileStream;
begin
  AStream:=TFileStream.Create('lol.gif', fmCreate);
  IdHTTP1.Get('http://j2me.webservis.ru/images/lol.gif', AStream);
  AStream.Free;
  ShellExecute(0, 'open', 'lol.gif', nil, nil, SW_SHOWNORMAL);
end;

у меня .gif ассоциирован с ACDSee, поэтому в нем и открывает загруженый gif.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #6  
Старый 25.06.2014, 08:56
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Код:
Stream.SaveToFile('C:\file.exe'); // сохраняем его
ShellExecute(0,'open','C:\Windows\Temp\file.exe',nil,nil,SW_NORMAL); // запускаем
Я один заметил разницу в путях?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter