2011-07-11 18 views
5

Quiero implementar un cliente FTP con Apache Commons Net solo para cargar datos. La conexión y el inicio de sesión en el servidor FTP funciona bien. Pero la carga no funciona bien. Los archivos son un poco más grandes que los originales. Y los archivos están dañados. Probé una imagen, un video y un archivo de texto. Solo el archivo de texto está bien.Apache Commons FTP problems

Ahora veo durante la depuración

boolean tmp=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

me da false. Entonces no se puede configurar. ¿Por qué? (Tal vez este no es el problema?)

Aquí una el resto de mi código

client=new FTPClient(); 

    try {   
     int reply; 
     client.connect(url, port); 
     reply = client.getReplyCode(); 

     if (!FTPReply.isPositiveCompletion(reply)) 
     { 
      client.disconnect(); 
      System.err.println("FTP server refused connection."); 
      System.exit(1); 
     } 


     client.login(user, pw); 
     boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 
     client.setControlKeepAliveTimeout(300); 
     client.enterLocalPassiveMode(); 

if (client.isConnected()) 
    { 
    try { 
     File file=new File(<FILE>); 
     FileInputStream inputStream = new FileInputStream(file); 
     OutputStream outputStream = client.storeFileStream(file.getName()); 

      byte[] buffer = new byte[4096]; 
      int l; 
     while((l = inputStream.read(buffer))!=-1) 
       { 
       outputStream.write(buffer, 0, l); 
      } 

      inputStream.close(); 
      outputStream.flush(); 
      outputStream.close();} 

Respuesta

11

cambiar los siguientes:

boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE); 

debe ser:

boolean xxx=client.setFileType(FTP.BINARY_FILE_TYPE); 

Usted tiene FileTransferModes confundidos con FileTypes.

Los FileTypes disponibles son:

Los FileTransferModes disponibles son:

supongo que si Apache introdujo enumeraciones para estas constantes tipos, entonces este tipo de problema podría evitarse, pero luego la biblioteca no estaría disponible a pre-java-5 runtimes.
Me pregunto cuánto de realmente es la compatibilidad con Java 1.4.

2

Si sólo el archivo de texto se ha transferido correctamente, sospecho que es necesario establecer el tipo de archivo de transferencia binaria.

Consulte el método setFileType para ver cómo hacerlo.

El commons-net wiki menciona que esta es la causa de la mayoría de los problemas de corrupción de archivos.

+0

Hola, lo probé, pero el método me da falso, por lo que no se puede establecer el modo. – Igor

+0

¿Has probado esto en alguna parte después de llamar al método connect? –

+0

Y también después del método de inicio de sesión. –

Cuestiones relacionadas