笔者最近开发的系统中需要写一个下载文件的功能
以前用BCB调用API写的很烦琐
忽然想起有一个API就可以搞定了
于是一大早就来搜索
这个API就是UrlDownloadToFile
不仅如此
Delphi的一些控件也可以轻松实现下载
如NMHTTP
指定NMHTTP
InputFileMode := ture; 指定Body为本地文件名
指定Get就可以下载了
下面是详细代码均出自CSDN我把它们都整理到这儿让大家方便查阅
uses UrlMon;
function DownloadFile(Source Dest: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil PChar(source) PChar(Dest) nil) = ;
except
Result := False;
end;
end;
if DownloadFile(http://wwwborlandcom/delphizip c:\kylixzip) then
ShowMessage(Download succesful)
else ShowMessage(Download unsuccesful)
例程
Uses URLMon ShellApi;
function DownloadFile(SourceFile DestFile: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil PChar(SourceFile) PChar(DestFile) nil) = ;
except
Result := False;
end;
end;
procedure TFormButtonClick(Sender: TObject);
const
// URL Location
SourceFile := http://wwwgooglecom/intl/de/images/home_titlegif;
// Where to save the file
DestFile := c:\temp\googleimagegif;
begin
if DownloadFile(SourceFile DestFile) then
begin
ShowMessage(Download succesful!);
// Show downloaded image in your browser
ShellExecute(ApplicationHandlePChar(open)PChar(DestFile)PChar()nilSW_NORMAL)
end
else
ShowMessage(Error while downloading + SourceFile)
end;
加入如下代码
NMHTTPInputFileMode := ture;
NMHTTPBody := 本地文件名;
NMHTTPHeader := Headtxt;
NMHTTPOutputFileMode := FALSE;
NMHTTPReportLevel := Status_Basic;
NMHTTPProxy := 代理服务器的IP地址;
NMHTTPProxyPort := 代理服务器的端口号;
With NMHTTPHeaderInfo do
Begin
Cookie := ;
LocalMailAddress := ;
LocalProgram := ;
Referer := ;
UserID := 用户名称;
Password := 用户口令;
End;
NMHTTPGet(http://wwwabcdefgcom/software/azip);
试试吧Delphi的目录中有TNMHTTP控件的例子NT+Win+IE+你可以用URL Moniker的功能
uses URLMon;
OleCheck(URLDownloadToFile(nilURLFilenamenil));
其中最后一个参数你还可以传入一个IBindStatusCallback的实现以跟蹤下载进度或控制中止下载简单的场合一句话就搞定了
BTW URL Moniker封装了大多数URL而不是像NMHTTP那样封装协议因此你可以用URLDownloadToFile下载HTTPFTP甚至本地文件和局域网文件还有其他的custom moniker比如MSITSTORE(MSDN Library的文档moniker实现)
var
DownLoadFile:TFileStream;
beginio
DownLoadFile:=TFileStreamCreate(c:\aararfmCreate);
IdHTTPGet(http://wwwsinacomcn/download/aararDownLoadFile);
DownLoadFileFree;
end;