Yeni bir proje oluşturun. Welcome Page'den
- Create a new Multi-Device Application (Delphi)
Form üzerine 2 adet TButton, TMemo ve TIdFTP (Indy Clients sekmesinde) yerleştirin. Uygulamada implementation altındaki uses için System.IOUtils ve IdFTPCommon eklemeyi unutmayın.
FTP ile ilgili olarak kullanıcı adı, host ve şifrenizi kodda kendinize göre düzenleyin.
Kısaca bazı noktalara açıklık getirmem gerekiyor. FTP host transfer tipi binary mi yoksa ASCII mi bilmenizde fayda var. Buna dikkat etmeden yaptığım denemelerde Win32 ve W64 uygulamalarında sorun yaşamaz iken Android platformunda upload sırasında READ TIME OUT hatası aldım. Nette bir hayli konu ile ilgili sorun yaşayan var host kaynaklı olabileceği söylenmiş. Bileşenin ConnectionTimeOut, ReadTimeOut ve ListenTimeOut değerleri ile oynayın denilmiş ama ben bunlarla çözüm bulamadım. Transfer tipini binary yaptığımda sorun ortadan kalktı.
Dikkat edilecek bir noktada ilgili dosyanın yolu yani Android yada Windows üzerine işlem görecek dosyanın nereye kaydedileceği yada nereden upload edileceği. Her iki platformda da ortak kod yazmak amacı ile aşağıdaki gibi path kullanıldı.
System.IOUtils.TPath.GetSharedDownloadsPath + System.SysUtils.PathDelim + 'test.txt'
FTP üzerindeki dosyanın zaman bilgisini, Get-Put-ChangeDir gibi fonksiyonlarını örnekten inceleyin.
Nerede kullanacağım FTP ile ilgili kodu diyebilirsiniz. Demek ki henüz ihtiyaç oluşmamış :)
unit Unit6;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.StdCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase, IdFTP,
FMX.ScrollBox, FMX.Memo;
type
TForm6 = class(TForm)
IdFTP1: TIdFTP;
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
dosya: String;
procedure FtpParametre();
procedure Mesaj(msg:String);
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.fmx}
uses System.IOUtils, IdFTPCommon;
// Upload işlemi
procedure TForm6.Button1Click(Sender: TObject); begin try FtpParametre; IdFTP1.Connect; IdFTP1.ChangeDir('\www'); if (FileExists(dosya)) then begin IdFTP1.Put(dosya,'test.txt',false); Memo1.Lines.Add('FTP upload işlemi tamamlandı'); end else begin Memo1.Lines.Add('Upload edilecek dosya bulunamadı'); end; except on E: Exception do begin Memo1.Lines.Add('FTP Hatası: '+E.ToString); Mesaj('FTP upload başarısız'); end; end; IdFTP1.Disconnect; Memo1.Lines.Add('FTP bağlantı işlemi kesildi'); end;
// Download işlemi
procedure TForm6.Button2Click(Sender: TObject); begin try FtpParametre; IdFTP1.Connect; Mesaj('FTP üzerindeki dosyanın değiş. tarih ve zaman'); Mesaj(DateTimeToStr (IdFTP1.FileDate('\www\test.txt'))); IdFTP1.ChangeDir('\www'); IdFTP1.Get('test.txt',dosya, true); Mesaj('Dosya: '+ dosya); Mesaj('FTP download işlemi tamamlandı'); except on E: Exception do begin Mesaj('!!! FTP Hatası: '+E.ToString); Mesaj('FTP download başarısız'); end; end; IdFTP1.Disconnect; Mesaj('FTP bağlantı işlemi kesildi'); end; procedure TForm6.FormCreate(Sender: TObject); begin dosya:= System.IOUtils.TPath.GetSharedDownloadsPath + System.SysUtils.PathDelim + 'test.txt'; Mesaj('Merhaba'); Mesaj('FTP Download Path: '+ System.IOUtils.TPath.GetSharedDownloadsPath); end; // Bağlantı için ön ayarlar procedure TForm6.FtpParametre; begin Mesaj('Bağlanıyor...'); with IdFTP1 do begin Disconnect; Username :='ftpUserName'; Host := 'ftpHost'; Password := 'MyPassword'; ConnectTimeout := 0; ListenTimeout := 10000; Passive := true; ReadTimeout := 30000; //TryNATFastTrack := true; TransferType := ftBinary; // uses IdFTPCommon end; end; procedure TForm6.Mesaj(msg: String); begin Memo1.Lines.Add(msg); end; end.
Hiç yorum yok:
Yorum Gönder