2016-04-01 12 views
1

Ich verwende die Bibliothek org.apache.commons.net.ftp, um mit FTP-Servern zu arbeiten. Ich benutze ungefähr 5 FTP-Server und einer von ihnen funktioniert nicht richtig (für mich). Zum Hochladen von Dateien verwende ich auch Methode ftpClient.setFileType(FTP.BINARY_FILE_TYPE), aber auf diesem Server ist die Größe der hochgeladenen Datei nicht die gleiche wie auf meiner lokalen Festplatte. Es ist normalerweise MP3-Dateien und wenn ich versuche, hochgeladenen MP3 zu spielen, gibt es etwas Buzz. Ich vermute, dass FTP-Server falsche Konfiguration hat, aber die Firma, die sich um diesen Server kümmert, wäre sehr unwahrscheinlich, einige Änderungen vorzunehmen. Noch ein sehr wichtiger Hinweis: Wenn ich Total Commander oder WinSCP zum Hochladen der Datei verwende, ist die hochgeladene Datei in derselben Größe korrekt.Apache Java FTP-Client wechselt nicht auf einigen Servern in den Binärübertragungsmodus

ist hier mein Code:

public class FtpConnection { 
    String FTP_SERVER; 
    String FTP_USER; 
    String FTP_PASSWORD; 
    int FTP_PORT; 
    FTPClient ftpClient; 
    int attempts = 3; 
    long FILE_SIZE; 

    public FtpConnection() { 
     FTP_SERVER = StradaAd.FTP_SERVER; 
     FTP_USER = StradaAd.FTP_USER; 
     FTP_PASSWORD = StradaAd.FTP_PASSWORD; 
     FTP_PORT = StradaAd.FTP_PORT; 

     ftpClient = new FTPClient(); 

     ftpClient.setCopyStreamListener(streamListener); 

     ftpClient.setBufferSize(1024 * 1024 * 1024); 
     ftpClient.setConnectTimeout(240000); 
     ftpClient.setDataTimeout(240000); 
     try { 
      ftpClient.connect(FTP_SERVER, FTP_PORT); 
      ftpClient.setControlKeepAliveTimeout(300); 
      ftpClient.enterLocalPassiveMode(); 
      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

      int replyCode = ftpClient.getReplyCode(); 
      if (!FTPReply.isPositiveCompletion(replyCode)) { 
       StradaAd.errorArea.append("Operation failed. Server reply code: " + replyCode); 
       return; 
      } 
      boolean success = ftpClient.login(FTP_USER, FTP_PASSWORD); 

      if (!success) { 
       //unsuccess 
      } 
     } catch (IOException ex) { 
      //error 
     } 
    } 

    public boolean uploadFile(File source, String destination, String chain) { 
     try { 
      FILE_SIZE = source.length(); 

      ftpClient.cwd("//" + chain + "/REKLAMY/"); 

      for(int i=0;i<attempts;i++) { 
       ftpClient.storeFile(destination, new FileInputStream(source)); 

       for(FTPFile f : ftpClient.listFiles()) { 
        if(f.getName().equals(destination) && f.getSize() == source.length()) 
         return true; 
       } 
      } 
      return false; 
     } catch (IOException ex) { 
      Logger.getLogger(FtpConnection.class.getName()).log(Level.SEVERE, null, ex); 
      return false; 
     } 
    }  
} 

Sie jemand die Lösung wissen, wie Sie diesen Code ändern oder setzen Sie diesen FTP-Server die gleiche Größe hochgeladene Datei haben? Vielen Dank im Voraus für jede Hilfe.

Antwort