usefuleのリンクhow to download a file from internet using Delphiをチェックアウトしましたが、私の質問には関連していますが、 Webサーバーのフォルダ内のすべてのファイルをローカルフォルダにコピーできるようにする必要があります。どれくらいのファイルがあるか、実際にインターネットに接続されているかどうかは分かりません。私を喜ばせるのに役立つコンポーネントはありますか?または、Windows APIを使用できますか? ありがとう ブライアンDelphiを使用してWebサーバーからファイルのフォルダをダウンロードするには
答えて
私は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
パーフェクトジェーレン、ありがとう。ブライアン –
HTTPは実際にはファイルのフォルダとして概念を処理しないので、サーバーでFTPが使用できるかどうかを確認する必要があります。
まだHTTPに悩まされている場合は、まずすべてのファイルの(完全な)URLのリストを収集し、次のいずれかを使用して1つずつダウンロードする方法を見つける必要があります。技術。
(あなたはその後、同時に複数のダウンロードを試みることができるが、豊富な経験は、その帯域幅がまさにそれです教えて:帯域幅、および一緒にファイルをひとつずつ、またはすべての数をダウンロードするだけのように長さ約かかります。)
Webサーバーがディレクトリブラウズを許可するように設定されている場合(ほとんどのサーバーでは許可されていない場合)、フォルダのURLを要求することができ、Webサーバーはディレクトリ一覧を含むHTMLファイルを返します。その後、HTMLを解析して個々のファイル名を特定し、一度に1つずつURLを要求する必要があります。
ディレクトリブラウジングが無効になっている場合、前もってファイル名を知らずに求めていることを行う方法がありません。利用可能であれば、FTPを使用する方が良い選択です。
ありがとうございます。私はFTPを使用して非常に満足しています。あなたはこれを行う方法を提案できますか? –
Jeroen Pluimersと同じコードを使用できます。 WinInet APIは、FTPとHTTPの両方で動作します。 HTTP URLの代わりにFTP URLを使用するだけです。 WinInet APIにはFTP特有の機能もありますが、現在使用している機能は複数のプロトコルの汎用性があります。 –
HTTPサーバーがWebDAVをサポートしている場合は、単純にmap a network driveとし、ファイルシステムコマンドを使用してサーバー側のファイルを反復することができます。
アプリケーションにネットワークドライブを作成する権限がない場合は、既存のWebDAVクライアントのDelphi用実装を代わりに使用できます。
- 1. サーブレットを使用してURLからファイルまたはフォルダをダウンロード
- 2. JavaScript/Typescriptを使用してサーバーからファイルをダウンロードする
- 3. Cのプログレスメーターを使用してWebからローカルファイルにファイルをダウンロード
- 4. closedxmlを使用してWeb APIからExcelファイルをダウンロードする
- 5. asp.netを使用してサーバーからzipファイルを含むフォルダをダウンロードするにはC#
- 6. ブラウザのファイルをサーバーからRest Webサービスを経由してダウンロード
- 7. ASP.Net WebフォームからのAJAXを使用してファイルをダウンロードし
- 8. Silverlightを使用してセキュリティで保護されたフォルダ内のWebサーバーからファイルにアクセスするには
- 9. PHPを使用してSFTPフォルダからローカルフォルダにすべてのファイルをダウンロード
- 10. Javaを使用してIEのサーバーからxmlファイルをダウンロードする方法は?
- 11. PowerShellを使用してSFTPサーバーからファイルをダウンロード
- 12. 特定のフォルダ内のWebサイトからファイルをダウンロードする方法、Chormeを使用しています
- 13. Win7 + IE11を使用し、内部Webサーバーからファイルをダウンロードできない
- 14. サーバーからiPhoneにフォルダ全体をダウンロード
- 15. Pythonを使用してcloudflareでWebサイトからファイルをダウンロード
- 16. ファイルをダウンロード中にWebサーバーからファイルを削除
- 17. AngularJSを使用してサーバーからファイルをダウンロードして保存する
- 18. Javaソケットを使用してサーバーからファイルをダウンロードする方法は?
- 19. 作成してJava Web Launcherをダウンロードし、Webサーバーからファイルをダウンロードして実行してください
- 20. smartgwtを使ってサーバーからファイルをダウンロードする方法は?
- 21. PHP:基本認証を使用して別のWebサーバーからファイルをダウンロードしますか?
- 22. Webサーバーからファイルのダウンロードを高速化する
- 23. Webサーバーからファイルをダウンロードするためのデザイン
- 24. Webサーバーから複数のファイルをダウンロードする
- 25. Delphi Indy HTTPSは、Webサーバーから最新のファイルを検出します。
- 26. c#を使用してURLからファイルをダウンロードするには
- 27. 電話帳を使用してWebサーバーからhtmlファイルをロード
- 28. ノードを使用してSFTPサーバーからファイルをダウンロードする方法
- 29. 1TBのフォルダとファイルをvps WebサーバーからAWS S3に転送
- 30. Webサービスを使用してWindowsフォームアプリケーションからサーバーにファイルをアップロードする方法
これは、Webサーバーによって異なります。一般的なケースでは、これはまったく可能ではない、と私は思う。 HTTPではなく、FTPを使用することもできます。それは簡単だろう。 –
可能な複製[サーバーからローカルホストにフォルダをダウンロード...](http://stackoverflow.com/questions/2043250/download-a-folder-from-server-to-local-host) –
@アンドレアス:それはFTPです!関連するDelphiコンポーネント/サンプルを教えてください。どうもありがとう。 –