我已经签出了有用的链接how to download a file from internet using Delphi和我的问题相关,但我会很感激一个指针开始。我需要能够将Web服务器文件夹中的所有文件复制到本地文件夹。我不知道有多少文件,或者是否有互联网连接。是否有组件可以帮助我?或者我可以使用Windows API? 谢谢 布赖恩如何使用Delphi从网络服务器下载文件的文件夹
回答
我会从this answer开始,而不是将输出结果放在一个字符串中,将缓冲区写入TFileStream。
WinInet真的很不错,因为它尊重用户在Windows上设置的代理设置(所以你不必花费大量的工作来设置Indy的配置)。
编辑:
我重构这个答案有点下载二进制文件。
由于它使用WinInet,你可以使用它来同时进行ftp和http下载(是的,我检查过它)。
您可以将其扩展为使用FtpFindFirstFile/InternetFindNextFile并阅读大量文件。
unit DownloadBinaryFileUnit;
interface
uses
Classes,
WinInet;
type
TWinInet = class
strict protected
class procedure ReadBinaryFileResponse(const UrlHandle: HINTERNET; const LocalFileName: string); static;
class procedure ReadResponse(const UrlHandle: HINTERNET; const ContentStream: TStream);
public
class procedure DownloadBinaryFile(const UserAgent, Url, LocalFileName: string); overload; static;
end;
implementation
uses
SysUtils,
Variants,
Windows,
IOUtils;
class procedure TWinInet.DownloadBinaryFile(const UserAgent, Url, LocalFileName: string);
var
InternetHandle: HINTERNET;
UrlHandle: HINTERNET;
begin
InternetHandle := InternetOpen(PChar(UserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
UrlHandle := InternetOpenUrl(InternetHandle, PChar(Url), nil, 0, 0, 0);
try
ReadBinaryFileResponse(UrlHandle, LocalFileName);
finally
InternetCloseHandle(UrlHandle);
end;
finally
InternetCloseHandle(InternetHandle);
end;
end;
class procedure TWinInet.ReadBinaryFileResponse(const UrlHandle: HINTERNET; const LocalFileName: string);
var
ContentStream: TFileStream;
begin
ContentStream := TFile.Create(LocalFileName);
try
ReadResponse(UrlHandle, ContentStream);
finally
ContentStream.Free;
end;
end;
class procedure TWinInet.ReadResponse(const UrlHandle: HINTERNET; const ContentStream: TStream);
var
Buffer: array[0..1023] of Byte;
BytesRead: Cardinal;
begin
repeat
InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
ContentStream.Write(Buffer, BytesRead);
until BytesRead = 0;
end;
end.
--jeroen
完美的Jeroen,谢谢。布莱恩。 – 2011-01-07 09:24:09
由于HTTP实际上不处理作为文件的文件夹的概念,您应该检查服务器上是否可用FTP。
但是,如果您确定自己坚持使用HTTP,则首先必须找到一种方法来收集所有文件的(完整)URL列表,然后使用其中一个技术。
(那么你可以尝试同时下载多个,但丰富的经验告诉我们,带宽就是:带宽,只是只要下载了一些文件,一个一个或全部一起约需)
如果且仅当Web服务器配置为允许目录浏览(大多数服务器不这样做),则可以请求该文件夹的URL,并且Web服务器将返回包含目录列表的HTML文件。然后,您必须解析HTML以确定单个文件名,然后一次请求一个URL。
如果禁用了目录浏览功能,那么在没有提前知道文件名的情况下,就无法做你所要求的功能。如果可用,使用FTP是更好的选择。
谢谢。我很高兴使用FTP。你能建议如何做到这一点? – 2011-01-06 09:26:31
您可以使用Jeroen Pluimers显示的相同代码。 WinInet API适用于FTP以及HTTP。只需使用FTP URL而不是HTTP URL。 WinInet API还提供了一些可用的FTP特定功能,而现在正在使用的功能对于多种协议而言更具通用性。 – 2011-01-06 21:10:14
如果HTTP服务器支持WebDAV,您可以简单地使用map a network drive并使用文件系统命令遍历服务器端文件。
如果您的应用程序无权创建网络驱动器,则可以使用Delphi的现有WebDAV客户端实现之一。
- 1. 如何从网络服务器的excel文件下载数据
- 2. 下载文件时从网络服务器上删除文件
- 3. 如何使用asp.net C从服务器下载包含文件的文件夹#
- 4. 网络文件夹浏览器服务
- 5. 如何使用网络文件管理器浏览服务器文件夹
- 6. 从网络服务器下载任何文件类型
- 7. 如何从我的网站从其他网络服务器下载CSV文件?
- 8. 如何从服务器下载文件,使用asp.net网站
- 9. 从FTP服务器下载文件到网络驱动器
- 10. 无法从网络服务器(OTA)下载上传的文件
- 11. Android - 从服务器上的文件夹下载所有文件
- 12. 如何从服务器下载文件
- 13. 如何从服务器下载文件?
- 14. 从网络服务器下载多个文件
- 15. 加速从网络服务器下载文件
- 16. 从Web服务器文件夹下载Excel文件
- 17. 使用ASP.NET网络服务帐户访问网络文件夹
- 18. 使用flash从FTP服务器下载文件夹
- 19. 如何从我的网络服务器下载文件到我的桌面?
- 20. 如何从FTP服务器下载文件夹
- 21. delphi windows服务无法从网上下载文件
- 22. 如何将文件从网络服务器下载到您的计算机上?
- 23. 如何从文件夹下载文件?
- 24. 使用Win7 + IE11,无法从内部网络服务器下载某个文件
- 25. 在我的网络服务器中下载文件
- 26. 使用node.js将文件从网址下载到服务器
- 27. 从网络下载文本文件
- 28. 如何通过ssh从网址下载文件到服务器
- 29. 如何通过网络服务下载文件?
- 30. 如何从服务器文件夹
这取决于Web服务器上。在一般情况下,我认为这完全不可能。不过,你可以使用FTP,而不是HTTP。那么这很容易。 – 2011-01-06 00:48:01
[下载文件夹从服务器到本地主机...](http://stackoverflow.com/questions/2043250/download-a-folder-from-server-to-local-host) – 2011-01-06 06:33:08
@Andreas:那就是FTP吧!你能指点我的相关德尔福组件/示例吗?非常感谢。 – 2011-01-06 09:28:22