1.1 使用urlmon 下载文件urlmon.dll 内置于Windows 中,可用于从网站下载文件。支持SSL/TLS 连接。但是,仅在Windows 上。将URLMon 单元添加到use 语句中。 URLDownloadToFile函数原型:
函数URLDownloadToFile(pCaller: 指针; URL: PChar; FileName: PChar; Reserve: DWORD; lpfnCB : 指针): HResult; stdcall; 外部'urlmon.dll' 名称'URLDownloadToFileA'; 使用示例:
过程TForm1.Button1Click(Sender: TObject);var Source, Dest: string;begin Source:='http://lazarus.freepascal.org'; Dest:='C:\Windows\temp\data.txt'; if URLDownloadToFile(nil, PChar(Source), PChar(Dest), 0, nil)=0 then showmessage('Download ok!') else showMessage('Error Downloading '+Source);end;1.2 使用fphttpclient 下载文件fphttpclient 是fcl 的一部分,由FPC 提供。 Web 包也可以单独使用。将fphttpclient 单元添加到use 语句中。您可以使用TFPHttpClient 类实例的Get 方法下载该文件(示例代码)。
程序dl_fphttp_d;{$mode delphi}{$ifdef windows}{$apptype console}{$endif}使用sysutils、classes、fphttpclient、openssl、opensslsockets;const Filename='testdownload.txt';var Client: TFPHttpClient; FS: TStream; SL: TStringList;begin { SSL 初始化必须在此处手动完成} InitSSLInterface; Client :=TFPHttpClient.Create(nil); FS :=TFileStream.Create(Filename,fmCreate 或fmOpenWrite); try try { 允许重定向} Client.AllowRedirect :=true ; Client.Get('https://google.com/',FS); E: 除EHttpClient writeln(E.Message) else raise; end; 最后FS.Free; Client.Free; end; { file Test } if FileExists(Filename) then尝试SL :=TStringList.Create; SL.LoadFromFile(Filename); writeln(SL.Text); 最后SL.Free; end; end.1.3 使用Synapse Synapse 提供串行端口和TCP/IP 连接来下载文件。与其他库不同,您只需将Synapse Pascal 源代码文件添加到您的代码中;不需要安装任何软件包或任何东西。唯一的例外是使用SSL/TLS/SSH 等加密需要外部加密库。 Synapse 通过阻塞(同步)套接字或有限的非阻塞模式处理网络通信。 Synapse 不使用异步套接字。 Synapse 包括简单、低级、非可视对象,有助于无故障编程。 (无多线程同步、Windows 消息处理等)非常适合命令行实用程序、可视化项目、NT 服务等。在Synapse 官方网站(http://www.ararat.cz/synapse/doku.php)上您还可以找到SynaSer,它是Synapse 项目的补充。用于阻止串行端口通信的库。这是Synapse中的非可视类,程序员界面与Synapsee非常相似。如果您使用Synapse,则必须安装Lazarus 和Delphi。 CodeTyphon 默认安装Synapse。在编写下载文件的程序时,请在uses语句中添加httpsend单元。示例代码:
.使用httpsend.函数DownloadHTTP(URL, TargetFile: 字符串): Boolean;var HTTPGetResult: Boolean; HTTPSender: THTTPSend;开始结果:=False; HTTPSender :=THTTPSend.Create; 尝试HTTPGetResult :=HTTPSender.HTTPMethod( ' GET ' , URL); if (HTTPSender.ResultCode=100) and (HTTPSender.ResultCode=299) then begin HTTPSender.Document.SaveToFile(TargetFile); Result :=True; end; 最后HTTPSender.Free; end;end ;1.4 综合示例使用上面的三种方法来下载文件。界面是:
具体操作我就不详细说了,代码如下:
单元UnitMain; {$ 模式Objfpc} {$ H+} {InterfaceUseSes 类、Sysutils、表单、控件、图形、对话框、Stdctrls、FPHTTPCLIENT、HTTPSE、HTTPSE、HTTPSE ND、urlmon;类型{tformmain} TFORMMAIN=类(TFORM) SynapseDownbutton: tbutton; t33 360 TButton; 过程SynapseDownButtonClick(Sender: TObject); 过程FPHttpClientDownButtonClick(Sender: TObject); 过程UrlDownButtonClick(Sender: TObject); 私有公共端;var FormMain: TFormMain;实现{$R *.frm}{ TFormMain }过程TFormMain.Url向下按钮(Sender: TObject)。 ) ;var Source, Dest: String;开始Source :='https://download.redis.io/releases/redis-6.2.1.tar.gz'; Dest :='e:\temp\redis-6.2.1.tar.gz' ; if UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil)=0 then ShowMessage('文件下载成功') else ShowMessage('文件下载失败'); Exception ShowMessage('文件下载失败' ); Exit;Exit;Procedure TFormMain.FPHttpClientDownButtonClick(Sender: TObject);var HttpClient: TFPHttpClient; DownLoadFile:TFileStream;begin DownLoadFile:=TFileStream.Create('e:\temp\redis-4.0 .10. tar.gz',fmCreate) ;HTTPClient:=TFPHttpClient .Create(nil); Try HttpClient.AllowRedirect :=True; HttpClient.Get('http://download.redis.io/releases/redis-4.0.10.tar .gz', DownLoadFile); ShowMessage('文件下载成功' );但ShowMessage('文件下载失败'); end; DownLoadFile.Free; HttpClient.Free;end;procedure TFormMain.SynapseDownButtonClick(Sender: TObject);var HTTPSender: THTTPSend;开始HTTPSender :=THTTPSend.Create; 尝试HTTPSender.HTTPMethod( 'GET ', 'http://download.redis.io/releases/redis-7.0.5.tar.gz'); if ( HTTPSender.ResultCode=100) and (HTTPSender.ResultCode=299) then begin HTTPSender.Document.SaveToFile(' e:\ temp\redis-7.0.5.tar.gz'); ShowMessage('文件下载成功' ); end else ShowMessage('文件下载失败'); 除了ShowMessage('文件下载失败'); end; HTTPSender.自由,结束,结束。
标题:delphi 上传下载文件,delphi软件下载
链接:https://www.7kxz.com/news/gl/19454.html
版权:文章转载自网络,如有侵权,请联系删除!