问题描述
我使用Indy 10和TIdFTP
组件。它可以使用FTP协议,但是当我想通过FTPS / SSL将.zip
文件上传到服务器时出现此错误。
加密:必需的通过TLS的显式FTP
错误是:
网络连接被本地系统中止
这是我的代码:
var
fileList: TStringList;
i : integer;
ToUpload : String;
fs: TFileStream;
LHandler: TIdSSLIOHandlerSocketopenSSL;
begin
try
LHandler := TIdSSLIOHandlerSocketopenSSL.Create(nil);
with IdFTP1 do
begin
if chkSSL.Checked then
begin
IOHandler := LHandler;
LHandler.SSLOptions.SSLVersions := [sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
LHandler.SSLOptions.Mode := sslmClient;
UseTLS := utUseExplicitTLS;
DataPortProtection := ftpdpsPrivate;
end;
if IdFTP1.Connected then
disconnect;
Username := edUserName;
Password := edPassword;
Host := edAddress;
if not Connected then
Connect;
end;
IdFTP1.ChangeDir(edpath + 'LocalXMLs/');
if FileExists(ExtractFilePath(Application.ExeName)+'XMLs\LocalXMLs\LocalXMLs.zip') then
begin
ToUpload := ExtractFilePath(Application.ExeName)+'XMLs\LocalXMLs\LocalXMLs.zip';
try
try
CurrStep := 3;
Application.ProcessMessages;
prgTotal.Max := 1;
ToUpload := ExtractFilePath(Application.ExeName)+'XMLs\LocalXMLs\LocalXMLs.zip';
try
try
fs := TFileStream.Create(ToUpload,fmOpenRead);
IdFTP1.TransferType := ftBinary;
IdFTP1.Put(fs,ExtractFileName(ToUpload));
Memo1.Lines.Add('3.Upload LocalXMLs.zip OK');
except
on E: Exception do
begin
Memo1.Lines.Add('Error: '+ e.Message);
FPut := true;
end;
end;
finally
fs.Free;
end;
except
on E: Exception do
begin
Memo1.Lines.Add('Error: '+ e.Message);
FPut := true;
end;
end;
finally
//fs.Free;
end;
end;
finally
IdFTP1.Quit;
Screen.Cursor := crDefault;
prgTotal.Position := 0;
LHandler.Free;
FPut := true;
end;
end;
我称之为此方法:
FPut := false;
UploadXmlFilesWithIDFTP;
while not FPut do
Application.ProcessMessages;
...
procedure TFm_SyncMain.IdFTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
fget := True;
FPut := True;
edSizeInfo.Text := 'completed.';
prgTotal.Position := 0;
end;
我做错了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)