2017-01-02 4 views
0

Ich habe ein Problem beim Übertragen von Dateien auf Windows FTP-Server von Unix/Mac/Linux env.Apache FTPS Client storeFile zu Windows FTPS Server von Unix/Linux/Max Ausgabe

während der genau gleiche Java-Code von Windows PC funktioniert. von * Nichts/Mac die Übertragung funktionierte nur mit diesem auf der FTP-Sitzung Befehle

set ftps:initial-prot 
set ftp:ssl-force true 
set ftp:ssl-protect-data true 
set ssl:verify-certificate no 

während auf meinem Windows-Rechner sie i did not müssen - ich nehme an, es zu Systemvariable bezieht.

Das ist mein Java-Code

protected FTPClient getClient(DeliveryDetails details) { 
    return new FTPSClient(false); // the connection is Explicit 
} 

public void setClient(FTPClient client, DeliveryDetails details) throws Exception { 
    client.setConnectTimeout(10000); 
    client.setDefaultTimeout(1000 * 60 * 2); 
    client.setControlKeepAliveTimeout(300); 
    client.setDataTimeout(15000); 
    client.connect(ftpDetails.host, ftpDetails.port); 
    client.setBufferSize(1024 * 1024); 
    client.login(ftpDetails.username, ftpDetails.getSensitiveData()); 
    client.setControlEncoding("UTF-8"); 
    client.setFileType(FTP.BINARY_FILE_TYPE); 
    client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE); 
    FTPSClient ftpsClient = (FTPSClient) client; 
    ftpsClient.execPBSZ(0); 
    ftpsClient.execPROT("P"); 
    // both with it and without it didnt work ftpsClient.setWantClientAuth(false); 
} 

public void saveToServer(FTPClient client, File fileName, InputStream stream){ 
    BufferedInputStream bis = new BufferedInputStream(stream); 
    boolean isSaved = client.storeFile(filename, bis); 
    client.logout(); 
} 

Was dieser Parameter in der FTPS Apache-Klasse entspricht?

set ftps:initial-prot 
set ftp:ssl-force true 
set ftp:ssl-protect-data true 
set ssl:verify-certificate no 
+0

1) nicht unterstützt Was 'ftps gesetzt: initial-prot' und die Andere? Sind das 'lftp' Befehle? Lass uns nicht raten! Erzähl uns! 2) Was macht der Code auf Mac und * nix? Erzähl uns! Genaue Fehlermeldung, Log-Datei, alles! –

Antwort

1

Es scheint, dass Windows NT Schreiben von Daten in FTP.BLOCK_TRANSFER_MODE

Einfache Lösung ist

private static final String WINDOWS_NT_SYTEM_TYPE = "Windows_NT"; 
    .... 
    .... 
    try { 
      String res = client.getSystemType(); 
      if (res.equals(WINDOWS_NT_SYTEM_TYPE)) { 
       client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE); 
      } else { 
       client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE); 
      } 
     } 
Verwandte Themen