Delphi文件下载器组件 [英] Delphi File Downloader Component

查看:106
本文介绍了Delphi文件下载器组件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个Delphi的文件下载器组件。你可以帮我吗?

解决方案

使用高级 URLDownloadToFile 功能:

 使用UrlMon; 

...

URLDownloadToFile(nil,'http://www.rejbrand.se/','C:\Users\Andreas Rejbrand\Desktop\\ \\index.html',0,nil);

或者,您可以使用WinInet函数很容易地编写自己的下载器功能,如

 使用WinInet; 

...

hInet:= InternetOpen(PChar(UserAgent),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
try
hURL:= InternetOpenUrl(hInet,PChar('http://'+ Server + Resource),nil,0,0,0);
尝试
重复
InternetReadFile(hURL,@Buffer,SizeOf(Buffer),BufferLen);

...

这里有很多示例代码。使用上面的搜索框。



更新



我写了一个小样本。您可能希望在自己的线程中执行此代码,并让其每10 kB左右ping它,以便您可以为用户提供一些进度条。例如,

  function DownloadFile(const UserAgent,URL,FileName:string):boolean; 
const
BUF_SIZE = 4096;
var
hInet,hURL:HINTERNET;
f:file;
buf:PByte;
amtc:cardinal;
amti:integer;
begin
result:= false;
hInet:= InternetOpen(PChar(UserAgent),INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
try
hURL:= InternetOpenUrl(hInet,PChar(URL),nil,0,0,0);
try
GetMem(buf,BUF_SIZE);
try
FileMode:= fmOpenWrite;
AssignFile(f,FileName);
try
重写(f,1);
重复
InternetReadFile(hURL,buf,BUF_SIZE,amtc);
BlockWrite(f,buf ^,amtc,amti);
,直到amtc = 0;
result:= true;
finally
CloseFile(f);
结束
finally
FreeMem(buf);
结束
finally
InternetCloseHandle(hURL);
结束
finally
InternetCloseHandle(hInet);
结束
结束


i need a file downloader component for Delphi . may you help me ?

解决方案

Use the high-level URLDownloadToFile function:

uses UrlMon;

...

URLDownloadToFile(nil, 'http://www.rejbrand.se/', 'C:\Users\Andreas Rejbrand\Desktop\index.html', 0, nil);

Or, you could very easily write your own downloader function using the WinInet functions, something like

uses WinInet;

...

hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
  hURL := InternetOpenUrl(hInet, PChar('http://' + Server + Resource), nil, 0, 0, 0);
  try
    repeat
      InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);

      ...

There is a lot of sample code here at SO. Use the search box above.

Update

I wrote a small sample. You might want to execute this code in its own thread and let it ping back every 10 kB or so, so that you can provide the user with some progress bar, for instance.

function DownloadFile(const UserAgent, URL, FileName: string): boolean;
const
  BUF_SIZE = 4096;
var
  hInet, hURL: HINTERNET;
  f: file;
  buf: PByte;
  amtc: cardinal;
  amti: integer;
begin
  result := false;
  hInet := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
    try
      GetMem(buf, BUF_SIZE);
      try
        FileMode := fmOpenWrite;
        AssignFile(f, FileName);
        try
          Rewrite(f, 1);
          repeat
            InternetReadFile(hURL, buf, BUF_SIZE, amtc);
            BlockWrite(f, buf^, amtc, amti);
          until amtc = 0;
          result := true;
        finally
          CloseFile(f);
        end;
      finally
        FreeMem(buf);
      end;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

这篇关于Delphi文件下载器组件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆