首页  编辑  

从网络中下载一个指定文件

Tags: /超级猛料/Network.网络通讯/TCP_IP/   Date Created:

uses

 URLMon, ShellApi;

function DownloadFile(SourceFile, DestFile: string): Boolean;

begin

 try

   Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;

 except

   Result := False;

 end;

end;

procedure TForm1.Button1Click(Sender: TObject);

const

 // URL Location

 SourceFile = 'http://www.google.com/intl/de/images/home_title.gif';

 // Where to save the file

 DestFile = 'c:\temp\google-image.gif';

begin

 if DownloadFile(SourceFile, DestFile) then

 begin

   ShowMessage('Download succesful!');

   // Show downloaded image in your browser

   ShellExecute(Application.Handle, PChar('open'), PChar(DestFile),

     PChar(''), nil, SW_NORMAL)

 end

 else

   ShowMessage('Error while downloading ' + SourceFile)

end;

// Minimum availability: Internet Explorer 3.0

// Minimum operating systems Windows NT 4.0, Windows 95

******************************

2.}

uses

 Wininet;

function DownloadURL(const aUrl: string): Boolean;

var

 hSession: HINTERNET;

 hService: HINTERNET;

 lpBuffer: array[0..1024 + 1] of Char;

 dwBytesRead: DWORD;

begin

 Result := False;

 // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);

 hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

 try

   if Assigned(hSession) then

   begin

     hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, 0, 0);

     if Assigned(hService) then

       try

         while True do

         begin

           dwBytesRead := 1024;

           InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);

           if dwBytesRead = 0 then break;

           lpBuffer[dwBytesRead] := #0;

           Form1.Memo1.Lines.Add(lpBuffer);

         end;

         Result := True;

       finally

         InternetCloseHandle(hService);

       end;

   end;

 finally

   InternetCloseHandle(hSession);

 end;

end;

******************************

在Delphi中如何从网络中提取一个文件到本地计算机中,如提取<BR> http://www.abcdefg.com/software/a.zip到本地指定的目录中?

在窗体中添加1个TNMHTTP控件(在FastNet页)然后在随便那个Button什么的下面

加入如下代码:

 NMHTTP1.InputFileMode := ture;

 NMHTTP1.Body := '本地文件名';

 NMHTTP1.Header := 'Head.txt';

 NMHTTP1.OutputFileMode := FALSE;

 NMHTTP1.ReportLevel := Status_Basic;

 NMHTTP1.Proxy := '代理服务器的IP地址';

 NMHTTP1.ProxyPort := '代理服务器的端口号';

 With NMHTTP1.HeaderInfo do

 Begin

   Cookie := '';

   LocalMailAddress := '';

   LocalProgram := '';

   Referer := '';

   UserID := '用户名称';

   Password := '用户口令';

 End;

 NMHTTP1.Get('http://www.abcdefg.com/software/a.zip');

试试吧,Delphi的\demos\FastNet\Http目录中有TNMHTTP控件的例子。

NT4+,Win95+,IE3+,你可以用URL Moniker的功能。

uses URLMon;

...

OleCheck(URLDownloadToFile(nil,'URL','Filename',0,nil));

其中最后一个参数你还可以传入一个IBindStatusCallback的实现以跟踪下载进度或控制中止下载。简单的场合一句话就搞定了。

--回复得分 0--  

BTW, URL Moniker封装了大多数URL,而不是像NMHTTP那样封装协议,因此你可以用URLDownloadToFile下载HTTP,FTP甚至本地文件和局域网文件,还有其他的custom moniker,比如MSITSTORE(MSDN Library的文档moniker实现)。