delphi idftp 및 idhttp 컨트롤
IDFTP
1
procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);
2
procedure ChangeDir(const ADirName: string);
3
procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload;
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;
4
procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: boolean); overload;
procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload;
5
procedure Delete(const AFilename: string);
if IdFTP1.Connected then
begin
...........
end;
,
, HTTP 。 FTP , 。 , , FTP 。 WinSocket FTP , Indy-- 。
Indy, , Winsocket , Unix 。 , 。
, Indy TIdFtp 。
1.
Indy 9 TIdFtp FTP 。
2.
(1)
, 。 RecvBufferSize SendBufferSize 。 TransferType , 。
RecvBufferSize ( 8192 ): , 。
SendBufferSize ( 32768 ): , 。 WriteStream , TStream 。 , 。
TransferType ( ftBinary): TIdFTPTransferType 。 (ftBinary ) ASCII (ftASCII)。 、 ; ASCII 。
(2)
OnDisconnected :TNotifyEvent , (disconnect) 。 Disconnect Socket , 。 , 。
OnStatus :TIdStatusEvent 。 。 DoStatus 。axStatus TIdStatus ;aaArgs , 。
OnWork :OnWord TWorkEvent 。OnWork DoWork Indy 。 。AWorkMode , :wmRead- ;wmWrite- 。AWorkCount 。
OnWorkBegin :TWorkBeginEvent 。 , BeginWork Indy 。 。AWorkMode , :wmRead- ;wmWrite- 。AWorkCountMax OnWorkBegin ,0 。
OnWorkEnd :TWorkEndEvent 。 , EndWork Indy 。AWorkMode , :wmRead- ;wmWrite- 。AWorkCount 。
, 。 , OnDisconnected ; OnStatus ; OnWork ; OnWorkBegin OnWorkEnd 。
(3)
, 。 , IdFtp , Connected False, TCP , :Host( ):String、Username( ):String、Password( ):String, Port( )。 Connect , 。
:procedure Connect(AAutoLogin: boolean; const ATimeout: Integer);
FTP
:AAutoLogin: boolean = True
, True。
const ATimeout: Integer = IdTimeoutDefault
, : 。
:
if IdFTP1.Connected then try
if TransferrignData then IdFTP1.Abort;
IdFTP1.Quit;
finally
end
else with IdFTP1 do try
Username := UserIDEdit.Text;
Password := PasswordEdit.Text;
Host := FtpServerEdit.Text;
Connect;
ChangeDir(CurrentDirEdit.Text);
finally
end;
(4)
, FTP 。 , ChangeDir(const ADirName: string) ,ADirName , ChangeDirUp 。
, List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean) , TransferType ftASCII(ASCII ), :ADest , 。 RetrieveCurrentDir 。
:
procedure ChangeDir(const ADirName: string);
const ADirName: string
: FTP CWD 。
procedure ChangeDirUp;
function RetrieveCurrentDir: string;
procedure List(ADest: TStrings; const ASpecifier: string; const ADetails: boolean);
:
ADest: TStrings
const ASpecifier: string =
,
const ADetails: boolean = true
property DirectoryListing: TIdFTPListItems;
:
LS := TStringList.Create;
try
IdFTP1.ChangeDir(DirName);
IdFTP1.TransferType := ftASCII;
CurrentDirEdit.Text := IdFTP1.RetrieveCurrentDir;
DirectoryListBox.Items.Clear;
IdFTP1.List(LS);
DirectoryListBox.Items.Assign(LS);
if DirectoryListBox.Items.Count > 0 then
if AnsiPos(total, DirectoryListBox.Items[0]) > 0 then DirectoryListBox.Items.Delete(0);
finally
LS.Free;
end;
(5)
, DirectoryListing.Items[sCurrFile].ItemType , ditDirectory , , 。 , 。 , , 。 Get , 。 , 。
:
procedure Get(const ASourceFile: string; ADest: TStream; AResume: Boolean); overload;
procedure Get(const ASourceFile: string; const ADestFile: string; const ACanOverwrite: boolean; AResume: Boolean); overload;
。
:
const ASourceFile: string
const ADestFile: string
const ACanOverwrite: boolean = false
AResume: Boolean = false
:
SaveDialog1.FileName := Name;
if SaveDialog1.Execute then begin
SetFunctionButtons(false);
IdFTP1.TransferType := ftBinary;
BytesToTransfer := IdFTP1.Size(Name);
if FileExists(Name) then begin
case MessageDlg(File aready exists. Do you want to resume the download operation?,
mtConfirmation, mbYesNoCancel, 0) of
mrYes: begin
BytesToTransfer := BytesToTransfer - FileSizeByName(Name);
IdFTP1.Get(Name, SaveDialog1.FileName, false, true);
end;
mrNo: begin
IdFTP1.Get(Name, SaveDialog1.FileName, true);
end;
mrCancel: begin
exit;
end;
end;
end
else begin
IdFTP1.Get(Name, SaveDialog1.FileName, false);
end;
(6)
, put 。
:
procedure Put(const ASource: TStream; const ADestFile: string; const AAppend: boolean); overload;
procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload;
:
const ASourceFile: string
const ADestFile: string =
const AAppend: boolean = false
:
if IdFTP1.Connected then begin
if UploadOpenDialog1.Execute then try
IdFTP1.TransferType := ftBinary;
IdFTP1.Put(UploadOpenDialog1.FileName, ExtractFileName(UploadOpenDialog1.FileName));
// ;
finally
//
end;
end;
(7)
Delete , , 。 RemoveDir 。
:
procedure Delete(const AFilename: string);
procedure RemoveDir(const ADirName: string);
, 。 , 。
:
if not IdFTP1.Connected then exit;
Name := IdFTP1.DirectoryListing.Items[iCurrSelect].FileName;
if IdFTP1.DirectoryListing.Items[iCurrSelect].ItemType = ditDirectory then try
idftp1.RemoveDir(Name);
finally
end
else
try
idftp1.Delete(Name);
finally
end;
(8)
, .. , 。
(9)
IdFtp , abort 。 OnWork 。
:
// OnClick
procedure TMainForm.AbortButtonClick(Sender: TObject);
begin
AbortTransfer := true;
end;
//IdFTP OnWork
procedure TMainForm.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
...
if AbortTransfer then IdFTP1.Abort;
AbortTransfer := false;
end;
(10)
, , , 。 , , Get Put 。
Size(FileName)。 , , Get AResume := True 。 , Put AAppend := True 。
,Indy ,TIdFtp 。 , 。 , 。Windows CreateThread , 。 Indy TIdThreadComponent, , 。 TIdThreadCOmponent
IDHTTP
, , HTTP :
procedure TForm1.HttpDownLoad(aURL, aFile: string; bResume: Boolean);
var
tStream: TFileStream;
begin //Http
if FileExists(aFile) then //
tStream := TFileStream.Create(aFile, fmOpenWrite) else
tStream := TFileStream.Create(aFile, fmCreate);
if bResume then //
begin
IdHTTP1.Request.ContentRangeStart := tStream.Size - 1;
tStream.Position := tStream.Size - 1; //
IdHTTP1.Head(aURL);
IdHTTP1.Request.ContentRangeEnd := IdHTTP1.Response.ContentLength;
end else //
begin
IdHTTP1.Request.ContentRangeStart := 0;
end;
try
IdHTTP1.Get(aURL, tStream); //
finally
tStream.Free;
end;
end;
IdHTTP Get , aURL ,aFile ,bResume , :
IdHTTP1.Request.ContentRangeStart := tStream.Size - 1;
tStream.Position := tStream.Size - 1; //
IdHTTP1.Head(aURL);
IdHTTP1.Request.ContentRangeEnd := IdHTTP1.Response.ContentLength;
, , , Head , , -1, -1 , IdHTTP , -1 , 。
FTP :
procedure TForm1.FtpDownLoad(aURL, aFile: string; bResume: Boolean);
var
tStream: TFileStream;
sName, sPass, sHost, sPort, sDir: string;
begin //ftp
if FileExists(aFile) then //
tStream := TFileStream.Create(aFile, fmOpenWrite) else
tStream := TFileStream.Create(aFile, fmCreate);
GetFTPParams(aURL, sName, sPass, sHost, sPort, sDir);
with IdFTP1 do
try
if Connected then Disconnect; //
Username := sName;
Password := sPass;
Host := sHost;
Port := StrToInt(sPort);
Connect;
except
exit;
end;
IdFTP1.ChangeDir(sDir); //
BytesToTransfer := IdFTP1.Size(aFile);
try
if bResume then //
begin
tStream.Position := tStream.Size;
IdFTP1.Get(aFile, tStream, True);
end else
begin
IdFTP1.Get(aFile, tStream, False);
end;
finally
tStream.Free;
end;
end;
GetFTPParams() 、 、 、 、 ,IdFTP , Get() , HTTP , IdFTP Get() 。
, , "REST 1"FTP , 350 。
:
function TForm1.GetProt(aURL: string): Byte;
begin // http ftp
Result := 0;
if Pos('http', LowerCase(aURL)) = 1 then
Result := 1; //http
if Pos('ftp', LowerCase(aURL)) = 1 then
Result := 2; //ftp
end;
。
procedure TForm1.MyDownLoad(aURL, aFile: string; bResume: Boolean);
begin
case GetProt(aURL) of
0: ShowMessage(' !');
1: HttpDownLoad(aURL, aFile, bResume);
2: FtpDownLoad(aURL, aFile, bResume);
end;
end;
GetProt() 。
(2) , , :
:
procedure TForm1.Button1Click(Sender: TObject);
var
aURL, aFile: string;
begin
aURL := ComboBox1.Text; // , "http://www.2ccc.com/update/demo.exe";
aFile := GetURLFileName(aURL); // , "demo.exe"
if FileExists(aFile) then
begin
case MessageDlg(' , ?', mtConfirmation, mbYesNoCancel, 0) of
mrYes: MyDownLoad(aURL, aFile, True); //
mrNo: MyDownLoad(aURL, aFile, False); //
mrCancel: Exit; //
end;
end else MyDownLoad(aURL, aFile, False); //
end;
MessageDlg() 、 。
:
procedure TForm1.Button2Click(Sender: TObject);
begin
AbortTransfer := True;
end;
, ,AbortTransfer , False, , True IdHTTP Disconnect IdFTP1 Abort , , , 。
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
AbortTransfer := False;
……
end;
IdHTTP1 IdFTP OnWorkBegin AbortTransfer False , Work , AbortTransfer 。
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
if AbortTransfer then
begin //
IdHTTP1.Disconnect;
IdFTP1.Abort;
end;
ProgressBar1.Position := AWorkCount;
Application.ProcessMessages;
end;
(3) :
IdHTTP IdFTP OnStatus :
procedure TForm1.IdHTTP1Status(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
begin
ListBox1.ItemIndex := ListBox1.Items.Add(AStatusText);
end;
IdHTTP IdFTP OnWork、OnStatus , , OK 。
8.3.4
3. ,F9 , 。
【 】
IdHTTP IdFTP , Get , , 。 , , 。
【 】
, Indy , URL TIdURI, IdURI , GetFTPParams() , :
var
URI: TIdURI;
begin
URI := TIdURI.Create(aURL); //
try
sProtocol := URI.Protocol; //
sHost := URI.Host; //
//…… URI
finally
URI.Free;
end;
end;
,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Delphi 10.3.3 IDE 글꼴 및 글꼴 크기 수정Delphi는 Windows 플랫폼에서 유명한 빠른 응용 프로그램 개발 도구(Rapid Application Development, 약칭 RAD)입니다.그것의 전신은 바로 DOS 시대에 성행한'Borland Turb...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.