Delphi客户端通过FTP服务器上传或下载文件或图片方法
首先在服务器端建立FTP服务器,网上有这种类型的软件,安装好后,在客户端建立服务器连接,然后再上传或下载文件或图片。
一、服务器连接
procedure TForm1.ConnectButtonClick(Sender: TObject);
begin
if not IdFTP1.Connected then
//如果与服务器断开连接
begin
try
IdFTP1.Username:=UserIDEdit.Text;
IdFTP1.Password:=PasswordEdit.Text;
IdFTP1.Host:=FtpServerEdit.Text;
IdFTP1.Connect;
//Connect;
Except //异常处理
Application.MessageBox('服务器连接失败!','智博软件');
end;
ConnectButton.Enabled:=true;
if IdFTP1.Connected then
begin
ConnectButton.Caption:='断开';
DebugListBox.Items.Add('主机名为:'+IdFTP1.Host);
DebugListBox.Items.Add('连接成功');
ConnectButton.Default:=false;
end;
end
else
try
IdFTP1.Quit;
//关闭客户端与服务器端的连接
finally
ConnectButton.Caption:='连接';
DebugListBox.Items.Add('连接失败');
ConnectButton.Enabled:=true;
ConnectButton.Default:=true;
end;
end;
二、文件或图片上传
Procedure
TFrmMain.UploadFileCleck(Sender:TObject);
var
FileName : string;
Item : TListItem;
SendFileItem
: TListItem;
begin
if not
FTPClient.Connected then
exit;
if
ListViewLocalFile.Selected =nil then
exit;
Item
:=ListViewLocalFile.Selected;
ListViewSendFile.Clear;
//处理所有选中文件
while Item <>nil
do
begin
SendFileItem := ListViewSendFile.Items.Add;
SendFileItem.Caption := Item.Caption;
//文件名
SendFileItem.SubItems.Add(Item.SubItems[1]);
//文件大小
SendFileItem.SubItems.Add(LocaLPath);
//本地路径
SendFileItem.SubItems.Add('==>');
//图示
SendFileItem.SubItems.Add(RemotePath);
//远程路径
SendFileItem.SubItems.Add(''); //状态
//下一个选中的项目
Item:=ListViewLocalFile.GetNextItem(Item,sdAll,[isSelected]);
end;
ListViewSendFile.Refresh; //刷新传送文件列表
//传送文件
ListViewLocalFile.Enabled :=false;
DriveComboBox1.Enabled:=false;
ListViewRemoteFile.Enabled:=False;
IsTransFerring:=True;
try
//处理所有要传送的文件
while
ListViewSendFile.Items.Count>0 do
begin
FileName:=ListViewSendFile.Item[0].Caption; //文件名
ListViewSendFile.Item[0].SubItems[4]:='正在上传...';
FTPClient.Put(LocalPath+'\'+FileName); //上传
DisplayRemoteFileList();
ListViewSendFile.items[0].Delect; //传送完毕,删除待传送文件列表
ListViewSendFile.Refresh;
end;
//设置相关控件是否可用
ListViewLocalFile.Enabled:=True;
DriveComboBox1.Enabled:=True;
ListVieewRemoteFile.Enabled:=True;
IsTransferring:=False;
except
ListViewSendFile.Items[0].SubItems[4]:='上传错误!';
MessageDlg('上传文件发生错误!',mtError,[mbyes],0);
//设置相关控件是否可用
ListViewLocalFile.Enabled:=True;
DriveCombBox1.Enabled:=True;
ListViewRemoteFile.Enabled:=True;
IsTransferring:=False; //没有传送状态
end;
end;
三、文件或图片下载
procedure
TFrmMain.DownloadFileClick(Sender:TObject);
var
FileName
:String;
Item
,SendFileItem : TListItem;
begin
if not
FTPClient.Connected Then //没有连接到服务器,退出
exit;
if
ListViewRemoteFile.Selected; //得到选中的文件
ListViewSendFile.Clear; //清空要传送的文件列表
//处理所有选中的文件
While Item <> nil
do
begin
SendFileItem :=ListViewSendFile.Items.Add;
//增加到列表
//列表项赋值
SendFileItem.Caption := Item.Caption;
//文件名
SendFileItem.SubItems.Add(Item.SubItems[1]);
//文件大小
SendFileItem.SubItems.Add(LocaLPath);
//本地路径
SendFileItem.SubItems.Add('<==');
//图示
SendFileItem.SubItems.Add(RemotePath);
//远程路径
SendFileItem.SubItems.Add('');
//下一个选中的项目
Item:=ListViewRemoteFile.GetNextItem(Item,sdAll,[isSelected]);
end;
ListViewSendFile.Refresh;
//刷新传送文件列表
//传送文件
ListViewRemoteFile.Enabled:=false;
//禁止操作相关控件
IsTransferring:=True; //设置正在传送
try
//处理所有要传送的文件
while
ListViewSendFile.Items.Count >0 do
begin
FileName :=
ListViewSendFile.Items[0].Caption; //文件名
ListViewSendFile.Items[0].SubItems[4]:='正在下载...';
ListViewSendFile.Refresh;
//刷新传送文件列表
if FileExists(FileName) then
//判断文件是否存在
begin
if
MessageDlg('文件己存在,继续下载吗?',mtConfirmation,[mbYes,mbNo],0)=mrYes
then
FTPClient.Get(FileName,LocalPath+'\'+FileName,false,true)
//续传
else
FTPClient.Get(FileName,LocalPath+'\'+FileName,true,False);
//覆盖
end
else
FTPClient.Get(FileName,LocalPath+'\'+FileName,false);
//下载
ListViewSendFile.items[0].Delect; //传送完毕,删除待传送文件列表
ListViewSendFile.Refresh;
//刷新待传送列表
DisplayLocalFileList();
//刷新本地文件列表
end;
ListViewRemoteFile.Enabled:=true;
IsTransferring:=False; //没有传送状态
except
ListViewSendFile.Items[0].SubItems[4]:='下载错误';
ListViewSendFile.Refresh; //刷新待传送文件列表
MessageDlg('下载文件发生错误!',mtError,[nbYes],0);
ListViewRemoteFile.Enabled:=True;
IsTransferring:=False; //没有传送状态
end;
end;
以上代码在Delphi7中调试通过。