Delphi 文件下载器组件

标签 delphi download

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

最佳答案

使用高级 URLDownloadToFile功能:

uses UrlMon;

...

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

或者,您可以使用 WinInet 函数轻松编写自己的下载器函数,例如

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);

      ...

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

更新

我写了一个小样本。例如,您可能希望在自己的线程中执行此代码,并让它每隔 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
          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 文件下载器组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521535/

相关文章:

delphi - 确定何时在虚拟机中运行

android - 在 Firemonkey 中加速应用程序的启动过程

r - 从多个 URL 自动下载,处理反馈对话框/cookie

javascript - 创建/下载带有 chrome 扩展名的 excel 文件

php - 如何使用密码保护网站上可下载的 pdf 文件

delphi - 具有 'varargs' 的函数如何检索堆栈的内容?

delphi - 搜索数据后,使DBGrid单元格改变颜色

delphi - 如何为 Delphi 编写映射 4 GB 的内存管理器

javascript - Angular2导出/下载json文件

android - 无法立即读取下载的文本文件