Einzelnen Beitrag anzeigen

Benutzerbild von FBrust
FBrust

Registriert seit: 4. Okt 2002
Ort: Saarbrücken
654 Beiträge
 
Delphi 10.4 Sydney
 
#1

idFTP: Download funktioniert nur in lokalem Netz

  Alt 22. Feb 2011, 12:29
Hallo,

ich möchte einen FTP-Download durchführen, allerdings funktioniert er nur im lokalen Netz.

Das im Code aufgeführte Formular soll die Datei herunterladen. Sobald der Download übers Internet durchgeführt werden soll, wird im Zielverzeichnis eine 0-Byte-Datei gleichen Namens angelegt und das Programm reagiert nicht mehr.

Der FTP-Server (hier FileZilla) zeigt jedoch an, dass der Transfer ordnungsgemäß stattfindet.

Hier der code:

Delphi-Quellcode:
procedure TfrmDownload.btnCancelClick(Sender: TObject);
begin
    frmMain.IdFTP1.Abort;
    Close;
end;

procedure TfrmDownload.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    Action := caFree;
    frmDownload := nil;
end;

procedure TfrmDownload.IdFTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Int64);
begin
    pbDL.Position := aWorkCount;
    Application.ProcessMessages;

end;



procedure TfrmDownload.IdFTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCountMax: Int64);
begin
    pbDL.Max := IdFTP1.Size('Downloads\' + strProgFile); ;

end;



procedure TfrmDownload.FormActivate(Sender: TObject);
var strDestFile : string;
    lStream : TFileStream;
    strMsg : string;
    qryTemp : TIBCQuery;
begin
    qryTemp := TIBCQuery.Create(Application);
    with qrytemp do
    begin
      Connection := dmFBData.ConData;
      SQL.Text := 'SELECT INTMWMAIL, INTMWFTP, STRFTPHOST, STRFTPUSER, ' +
                  'STRFTPPW, INTFTPPORT ' +
                  'FROM SD_PARAMS';
      try
        Open;
        idFTP1.Host := FieldbyName('STRFTPHOST').AsString;
        idFTP1.Username := FieldbyName('STRFTPUSER').AsString;
        idFTP1.Password := FieldbyName('STRFTPPW').AsString;
        idFTP1.Port := FieldbyName('INTFTPPORT').AsInteger;
        Close;
      except
        on E:Exception do
        begin
          strMsg := 'Fehler bei Ermittlung FTP-Daten, Meldung: ' + E.Message;
          ShowWarningEx(strMsg);
        end;
      end;
      Free;
    end;


    strDestFile := GetSpecialFolderLocation($23) + 'test\Updates\' + strProgFile;
    lStream := TFileStream.Create(strDestFile, fmCreate or fmShareDenyNone);
    try
      idFTP1.Connect;
      Application.ProcessMessages;
      idFTP1.Get('Downloads\' + strProgfile, lStream);
    except
      on E:Exception do
      begin
        ShowWarningEx('Fehler bei Download, Meldung: ' + E.Message);
        lStream.Free;
        idFTP1.Disconnect;
        Exit;
      end;
    end;
    idFTP1.Disconnect;
    lStream.Free;
    strMsg := 'Download beendet. ' + #13#10#13#10 +
              'Das Programm wird nun beendet und aktualisiert. Nach der ' +
              'Aktualisierung wird es neu gestartet.';
    ShowInfo(strMsg);
    RunAndWaitShell(strDestFile, ' /sp- /silent', 0);
    Close;

    frmMain.Close;

end;
Wie gesagt, im lokalen Netzt läuft alles prima. Die Ordnerstruktur ist auch identisch, d. h. die Quell- und Zielordner sind beide vorhanden.

Hat vielleicht jemand einen Tip?

Gruß
Frank
"Ich habe Dinge gesehen, die ihr Menschen niemals glauben würdet. Gigantische Schiffe, die brannten, draußen vor der Schulter des Orion" - Roy Batty

Geändert von FBrust (22. Feb 2011 um 12:52 Uhr) Grund: Code ergänzt
  Mit Zitat antworten Zitat