2016-04-01 7 views
1

FTPサーバーを操作するためにorg.apache.commons.net.ftpライブラリを使用しています。私は約5つのFTPサーバーを使用し、そのうちの1つが(私のために)適切に動作しません。ファイルをアップロードするには、方法ftpClient.setFileType(FTP.BINARY_FILE_TYPE)も使用しますが、このサーバーではアップロードしたファイルのサイズがローカルのHDDと同じではありません。それは通常MP3ファイルであり、アップロードされたMP3を再生しようとすると、いくつかの話題があります。 私はFTPサーバーの設定が間違っていると思っていますが、このサーバーを担当する会社は変更を加えることはほとんどありません。 さらに重要な注意点:Total CommanderまたはWinSCPを使用してファイルをアップロードすると、アップロードされたファイルは同じサイズで正しいことになります。ここでApache Java FTPクライアントが一部のサーバーでバイナリ転送モードに切り替わりません

は私のコードです:

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; 
     } 
    }  
} 

このコードを変更したり、同じサイズ、アップロードされたファイルを持っているために、このFTPサーバーを設定する方法ソリューションを誰かを知っていますか? ご協力いただきありがとうございます。

答えて

関連する問題