Вопрос по Delphi скачать файл по HTTP

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by lolec69, 11 Mar 2010.

  1. lolec69

    lolec69 Banned

    Joined:
    1 Apr 2009
    Messages:
    0
    Likes Received:
    3
    Reputations:
    0
    Как скачать файл по HTTP
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Что то типа:
    Code:
    var 	
      stream : TMemoryStream; 	
      http : TIdHTTP; 
    begin 	
     http := TIdHTTP.Create; 	
     stream := TMemoryStream.Create; 	
     try 		
        http.get('somesite.com/somefile', stream);
        stream.SaveToFile('MyFile'); 	
    finally 		
        FreeAndNil(http); 		
        FreeAndNil(stream); 	
    end; 
    end;
    ЗЫ По моему самый часто задаваемый вопрос
     
    #2 GhostOnline, 11 Mar 2010
    Last edited: 11 Mar 2010
  3. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Code:
     var
      HTTP : TidHTTP;
      Strm : TMemoryStream;
     begin
      Http := TIdHTTP.Create(nil);
      strm := TMemoryStream.Create;
       
      HTTP.Request.CustomHeaders.Add('Range: bytes=0-12954');
      HTTP.Get('http://vk.com/u21312312/audio/ff75373434gf4.mp3', strm);
      
      strm.SaveToFile
      strm.free;
      http.free;
    
    так ты закачаешь по диапозону... можешь юзать для докачки или для закачки файла по частям... главное юзай АСИнхронную передачу))
    end;
     
  4. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Асинхронная передача через TIdHTTP :confused:
    это как?
     
  5. zeppe1in

    zeppe1in Elder - Старейшина

    Joined:
    12 Jul 2006
    Messages:
    343
    Likes Received:
    66
    Reputations:
    18
    Code:
    uses urlmon;
    
    URLDownloadToFile (nil,'https://forum.antichat.ru/thread185851.html','C:/yo.html', 0, nil);
     
    1 person likes this.
  6. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    Запихай в поток:) а то при загрузке будет интерфейс виснуть:) особенно при загрузке жирных файлов:)
     
  7. buket

    buket New Member

    Joined:
    7 Apr 2007
    Messages:
    21
    Likes Received:
    0
    Reputations:
    0
    а как быть с русскими именами файлов, название кракозябрами получается
     
  8. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    используй URLEncode)))
     
  9. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Почему все используют TMemoryStream?))
    Не проще так
    Code:
    var 	
      stream : TFileStream; 	
      http : TIdHTTP; 
    begin 	
     http := TIdHTTP.Create; 	
     stream := TFileStream.Create('C:/sffsf.dat', fmCreate); 	
     try 		
        http.get('somesite.com/somefile', stream);
    finally 		
        FreeAndNil(http); 		
        FreeAndNil(stream); 	
    end; 
    
    Не будет тратиться время на сохранение из TMemoryStream на диск.
     
    1 person likes this.
  10. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    И много времени сэкономишь?
     
  11. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Одинаково. Все равно из сети в память, из памяти на диск перегонется.
    Эти классы идентичны, оба наследники TStream
     
  12. Sunstrider

    Sunstrider Banned

    Joined:
    9 Apr 2010
    Messages:
    152
    Likes Received:
    10
    Reputations:
    4
    А можно реализовать чтобы файл скачался,потом запустился
     
  13. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Нет
    Не совсем)
    function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT;
     
  14. Sunstrider

    Sunstrider Banned

    Joined:
    9 Apr 2010
    Messages:
    152
    Likes Received:
    10
    Reputations:
    4
    можно полностью код ,прогрузки к жертве и запуска
     
  15. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    var
    stream : TFileStream;
    http : TIdHTTP;
    begin
    http := TIdHTTP.Create;
    stream := TFileStream.Create('C:/tmp.exe', fmCreate);
    try
    http.get('somesite.com/somefile', stream);
    WinExec(PAnsiChar('C:/tmp.exe'), SW_SHOW);
    finally
    FreeAndNil(http);
    FreeAndNil(stream);
    end;
     
  16. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    А как сюда прогресс бар прикрутить? и как узнать размер скачиваемого файла, какая скорость закачки.
     
  17. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10


    Размер - idhttp1.Response.RawHeaders.Text
     
    1 person likes this.
  18. Artist

    Artist Member

    Joined:
    10 Jul 2010
    Messages:
    89
    Likes Received:
    5
    Reputations:
    0
    Осталось узнать скорость закачки и сколько скачалось и тогда прогресс бар можно прикрутить.
     
  19. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10
    Сколько скачалось и осталось я думаю не составит труда.....


    Парсишь в maxvalue прогресс бара "Content-Length: " - который выдал тебе (idhttp1.Response.RawHeaders.Text),

    Потом в обработчике событий IdHTTP1Work пишешь progressbar.progress:=AWorkCount;;
     
  20. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    А через винсок?