はじめまして。
過去ログを検索しても見つける事が出来なかったので投稿させて頂きます。
ネットからファイル(GIFやHTML等)を取得したいのですが
どのコンポーネントを使うのが一番簡単でしょうか?
単純にWEBサーバー上のファイルをローカルに落としたいだけなのですが…。
環境は Delphi6 Professinal です。
よろしくお願いします。
単純にファイルをダウンロードしてくるだけなら
InternetOpen、InternetOpenUrl、InternetReadFile関数つかって
実現できそうですが
htmlファイルの内容をみてGIF画像やら他ファイルをダウンロード
するには、もうひと工夫いりそうですね
InternetReadFileでファイルダウンロードして
ローカルドライブに保管するときは、TFileStreamで保存したほうがよさそうです。
>どのコンポーネントを使うのが一番簡単でしょうか?
ということなら Indy があります。
>どのコンポーネントを使うのが一番簡単でしょうか?
おっと、失礼しました。
私の発言は、参考までにしておいてください^^;
ふじっこさん、TtPIPICHさん、
早速のご返信、ありがとうございます!
とりあえず、目的達成の為にInternetReadFile関数を使用することにしました。
Indyはこれから(今から)勉強します。
どうもありがとうございました!!!
ファイル決めうちDLなら URLMon ユニットに簡単に使える関数があるよ。
http://www.campus.ne.jp/~ishigami/CREATION/TECHNIC/WEBAP-2.htm
http://lupin.client.jp/delphi/#44
とか。ググルといっぱい例がある。
りおりおさん、ありがとうございます。
早速教えて頂いたホームページに行ってみます!
てっきり、こうやるものだと思っていたけど
いろいろ方法があるんですね。
var
SaveFileName, SaveURL: String;
DownLoadURL1: TDownLoadURL;
begin
略
DownLoadURL1 := TDownLoadURL.Create(Self); try
DownLoadURL1.URL := SaveURL;
DownLoadURL1.Filename := SaveFileName;
DownLoadURL1.ExecuteTarget(nil);
finally DownLoadURL1.Free; end;
end;
ふじっこさんの
> 単純にファイルをダウンロードしてくるだけなら
> InternetOpen、InternetOpenUrl、InternetReadFile関数つかって
> 実現できそうですが
というのは、どうやって実装するのでしょうか?
TDownLoadURL ってクラスがあるんですか?
> InternetOpen、InternetOpenUrl、InternetReadFile関数つかって
WinInet.pas にあるやつ。普段はわたしもこれを使っています。
function GetUrlFile(const URL:string; Stream:TStream):Boolean;
var
hOpen,hURL:HINTERNET;
pBuf:pointer;
ReadBytes:DWORD;
begin
result := false;
hOpen := InternetOpen('Arara-Agent',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
if not Assigned(hOpen) then exit;
hURL := InternetOpenURL(hOpen,PChar(URL),nil,0,0,0);
if not Assigned(hURL) then begin
InternetCloseHandle(hOpen);
exit;
end;
GetMem(pBuf,1024);
Stream.Position := 0;
try
repeat
InternetReadFile(hURL,pBuf,1024,ReadBytes);
Stream.Write(pBuf^,ReadBytes);
until ReadBytes = 0;
finally
FreeMem(pBuf);
InternetCloseHandle(hURL);
InternetCloseHandle(hOpen);
end;
if Stream.Size = 0 then exit;
Stream.Position := 0;
result := true;
end;
普通は TMemoryStream で受け取っています。画像なら TBitmap や TJpegImage
TGifImage の LoadFromStream() でセット出来ますし、HTML ドキュメントなら
TWebBrowser に直接セットしたり、Memo1 に表示したりできます。もちろん、
ファイルにおとすのも簡単。上記のコードでは、不正な URL を入力したときの
判断が出来ないので改良の余地があります。Indy などのライブラリは、苦労して
使い方を覚えてもバージョンが変わったりすると使えなくなったりするので、なる
べく低レベルでやりたいと思っています。ほんとは WinInet より WinSocket で
やりたいんで勉強中です。Internet 周りは難しいです。
>TDownLoadURL ってクラスがあるんですか?
ヘルプ見たら、TActionList から TDownLoadURLオブジェクトというのを追加できるんですね。初めて知った…
ツイート | ![]() |