Bei FTP Übertragung wird Datei nicht komplett übertragen

AlexGT

Neues Mitglied
Hallo zusammen,

dies ist mein erster Post.
Habe zu meinem Problem nichts passendes gefunden.
Wenn ich mit FTPClient von Apache eine Datei übertrage, wird nicht die komplette Datei übertragen sonden einige KB weniger.
z.B.
Größe Remotefile 353139 KB
Größe Localfile 353144 KB

Wenn ich die gleiche Datei auf den gleichen FTP-Server mit WinSCP übertrage ist diese komplett auf dem Server vorhanden.

Dies ist der Code den ich zum Test verwende

Java:
try {

//Holen der Dateigröße
File myFile = new File( localFile );
long sizeFile = myFile.length();
myFile = null;

FTPClient ftp = new FTPClient();

//Mit oder ohne Port unvollständige übertragung
    ftp.connect( host );

if ( FTPReply.isPositiveCompletion( ftp.getReplyCode() ) ) {
        if ( ftp.login( user, pw ) ) {

//Setzen der Optionen
ftp.setFileTransferMode( FTP.BINARY_FILE_TYPE );

System.out.println( "getReceiveDataSocketBufferSize " + ftp.getReceiveDataSocketBufferSize() );
System.out.println( "getSendDataSocketBufferSize " + ftp.getSendDataSocketBufferSize() );
System.out.println( "getBufferSize " + ftp.getBufferSize() );

System.out.println( ftp.getStatus() );

ftp.changeWorkingDirectory( "/" );

InputStream in = new FileInputStream( localFile );

System.out.println("Starte Übertragung von " + localFile + " mit " + sizeFile / 1024 + " KB");

if ( ftp.storeFile( remoteFile, in ) ) {
                System.out.println( "Upload erfolgreich: " + localFile + " -> " + remoteFile );
} else {
                System.out.println( "Status " + ftp.getReplyCode() + " - Upload fehlerhaft: " + localFile + " -> " + remoteFile );
}

System.out.println( "Größe Remotefile " + Long.parseLong( ftp.getSize( remoteFile ) ) / 1024 + " KB");
System.out.println( "Größe  Localfile " + sizeFile / 1024 + " KB");

System.out.println( ftp.getStatus() );

if ( ftp.logout() ) {
                System.out.println( "Logout erfolgreich " + ftp.getReplyString() );
} else {
                System.out.println( "Logout nicht erfolgreich " + ftp.getReplyString() );
}
            ftp.disconnect();
}
    }
} catch ( Exception e ) {
    System.out.println( e.getLocalizedMessage() );
}
===============
Das ist das Ergebniss

getReceiveDataSocketBufferSize 0
getSendDataSocketBufferSize 0
getBufferSize 0
211-Server status:
Transfer mode: ASCII
List mode: UNIX
Current number of users: 271
Maximum number of users: 8364
Idle timeout: 300 seconds
Hostname: zizzi
211 End of server status.

Starte Übertragung von U:/eNVenta/TestUpload.zip mit 353144 KB
Upload erfolgreich: U:/eNVenta/TestUpload.zip -> /TestUpload.zip
Größe Remotefile 353139 KB
Größe Localfile 353144 KB
211-Server status:
Transfer mode: ASCII
List mode: UNIX
Current number of users: 271
Maximum number of users: 8364
Idle timeout: 300 seconds
Hostname: zizzi
211 End of server status.

Logout erfolgreich 221 Goodbye.


Auch schon Buffersize geändert, Passiv oder aktive, Port hinzugefügt.
Andere Apache Version verwendet
Keine Besserung.

Vielleicht kann mir jemand von euch einen Rat geben.

Danke im vorraus

AlexGT
 
Zuletzt bearbeitet von einem Moderator:
Versuche mal, dein setFileTransferMode durch diese Zeilen zu ersetzen:
Java:
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);

Edit: Nur noch zur Erläuterung: Apache Entwickler haben da einfach bei beiden Methoden ein int Parameter und int Konstanten. Du scheinst (so es kein Copy & Paste Fehler war) nun beim TransferMode ein FileType gesetzt. Wenn das funktioniert hätte, dann wäre es Zufall. Und das ist ein gutes Beispiel, wieso bei sowas eine Enum besser wäre - dann hätte man da zwei Enums und man kann nicht ein falschen Wert angeben ...
 

Zurück
Oben