SFTP (Secure File Transfer Protocol) — это протокол, используемый для безопасной передачи файлов между компьютерами. Если вам необходимо передавать чувствительные файлы в рамках вашего программного обеспечения, SFTP может быть идеальным решением. В этой статье мы рассмотрим, как установить соединение SFTP с Delphi, как бесплатным компонентом, так и вручную.
Бесплатный компонент SFTP для Delphi
Одним из самых популярных бесплатных компонентов SFTP для Delphi является Indy. Indy — это набор компонентов, разработанных Marco Cantu, которые включают в себя широкий спектр сетевых возможностей, в том числе поддержку SFTP. Чтобы использовать Indy в своем проекте Delphi, вам нужно будет добавить компоненты Indy в свой проект. Вы можете сделать это, добавив IdGlobal и IdSSH2 в раздел uses своего единичного модуля.
Вот пример кода, демонстрирующий, как установить соединение SFTP с помощью Indy в Delphi:
unit Unit1;
interface
uses
IdGlobal, IdSSH2, IdSFTP;
type
TForm1 = class(TForm)
btnConnect, btnDisconnect, btnUpload, btnDownload: TButton;
edHost, edUsername, edPassword, edLocalFile, edRemoteFile: TEdit;
lbOutput: TListBox;
private
{ Private declarations }
FSFTP: TIdSFTP;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
FSFTP := TIdSFTP.Create(nil);
try
FSFTP.Host := edHost.Text;
FSFTP.Username := edUsername.Text;
FSFTP.Password := edPassword.Text;
FSFTP.Connect;
lbOutput.Items.Add('Connected to ' + FSFTP.Host);
except
on E: Exception do
lbOutput.Items.Add('Error connecting: ' + E.Message);
end;
end;
procedure TForm1.btnDisconnectClick(Sender: TObject);
begin
if FSFTP.Connected then
FSFTP.Disconnect;
lbOutput.Items.Add('Disconnected from ' + FSFTP.Host);
end;
procedure TForm1.btnUploadClick(Sender: TObject);
begin
if not FSFTP.Connected then
Exit;
FSFTP.PutFile(edLocalFile.Text, edRemoteFile.Text);
lbOutput.Items.Add('File uploaded: ' + edLocalFile.Text);
end;
procedure TForm1.btnDownloadClick(Sender: TObject);
begin
if not FSFTP.Connected then
Exit;
FSFTP.GetFile(edRemoteFile.Text, edLocalFile.Text);
lbOutput.Items.Add('File downloaded: ' + edRemoteFile.Text);
end;
end.
В этом примере мы создаем форму с кнопками для подключения, отключения, загрузки и скачивания файлов, а также полями для ввода хоста, имени пользователя, пароля и имен файлов. При нажатии кнопки "Подключиться" мы создаем экземпляр TIdSFTP и устанавливаем его свойства, а затем вызываем метод Connect. При нажатии кнопки "Отключиться" мы вызываем метод Disconnect, чтобы закрыть соединение. Кнопки "Загрузить" и "Скачать" используют методы PutFile и GetFile соответственно, чтобы передавать файлы между локальной машиной и удаленным сервером SFTP.
Ручное подключение SFTP в Delphi
Если вам не нравится использовать компоненты Indy или вы хотите узнать, как работает SFTP на более низком уровне, вы можете установить соединение SFTP вручную, используя сокеты. Это более сложный процесс, но он дает вам больше контроля над процессом.
Вот пример кода, демонстрирующий, как установить соединение SFTP вручную в Delphi:
unit Unit1;
interface
uses
IdGlobal, IdSSH2, IdSFTP, IdStackSSH, IdStackSFTP;
type
TForm1 = class(TForm)
btnConnect, btnDisconnect, btnUpload, btnDownload: TButton;
edHost, edUsername, edPassword, edLocalFile, edRemoteFile: TEdit;
lbOutput: TListBox;
private
{ Private declarations }
FSocket: TIdTCPClient;
FSSH: TIdSSH2;
FSFTP: TIdStackSFTP;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
FSocket := TIdTCPClient.Create(nil);
try
FSocket.Host := edHost.Text;
FSocket.Port := 22; // стандартный порт SFTP
FSocket.Connect;
lbOutput.Items.Add('Connected to ' + FSocket.Host);
FSSH := TIdSSH2.Create(nil);
try
FSSH.Socket := FSocket;
FSSH.Username := edUsername.Text;
FSSH.Password := edPassword.Text;
FSSH.Connect;
FSFTP := TIdStackSFTP.Create(nil);
try
FSFTP.SSH := FSSH;
FSFTP.Connect;
lbOutput.Items.Add('SFTP connected');
except
on E: Exception do
lbOutput.Items.Add('Error connecting SFTP: ' + E.Message);
end;
except
on E: Exception do
lbOutput.Items.Add('Error connecting SSH: ' + E.Message);
end;
except
on E: Exception do
lbOutput.Items.Add('Error connecting: ' + E.Message);
end;
end;
procedure TForm1.btnDisconnectClick(Sender: TObject);
begin
if FSFTP.Connected then
FSFTP.Disconnect;
if FSSH.Connected then
FSSH.Disconnect;
if FSocket.Connected then
FSocket.Disconnect;
lbOutput.Items.Add('Disconnected from ' + FSocket.Host);
end;
procedure TForm1.btnUploadClick(Sender: TObject);
begin
if not FSFTP.Connected then
Exit;
FSFTP.PutFile(edLocalFile.Text, edRemoteFile.Text);
lbOutput.Items.Add('File uploaded: ' + edLocalFile.Text);
end;
procedure TForm1.btnDownloadClick(Sender: TObject);
begin
if not FSFTP.Connected then
Exit;
FSFTP.GetFile(edRemoteFile.Text, edLocalFile.Text);
lbOutput.Items.Add('File downloaded: ' + edRemoteFile.Text);
end;
end.
В этом примере мы снова создаем форму с кнопками для подключения, отключения, загрузки и скачивания файлов, а также полями для ввода хоста, имени пользователя, пароля и имен файлов. При нажатии кнопки "Подключиться" мы создаем экземпляр TIdTCPClient и устанавливаем его свойства, а затем вызываем метод Connect. Затем мы создаем экземпляр TIdSSH2 и устанавливаем его свойства, а затем вызываем метод Connect. Наконец, мы создаем экземпляр TIdStackSFTP и вызываем метод Connect, чтобы установить соединение SFTP. При нажатии кнопки "Отключиться" мы вызываем методы Disconnect для FSFTP, FSSH и FSocket, чтобы закрыть все соединения. Кнопки "Загрузить" и "Скачать" работают так же, как и в предыдущем примере.
Заключение
В этой статье мы рассмотрели, как установить соединение SFTP с Delphi, как бесплатным компонентом, так и вручную. Indy — отличный бесплатный компонент SFTP для Delphi, который упрощает процесс передачи файлов по SFTP. Если вам нужен более низкий уровень контроля, вы можете установить соединение SFTP вручную с помощью сокетов. В любом случае, надеюсь, эта статья поможет вам в ваших efforts по передаче файлов по SFTP в Delphi.
В этой статье описывается, как установить соединение SFTP с Delphi, как с помощью бесплатного компонента Indy, так и вручную с использованием сокетов.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.