Indy IdFtp-网络连接被本地系统中止

问题描述

我使用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 (将#修改为@)