es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Apache Commons FTPClient no recupera todos los bytes del archivo de origen.

Tengo un caso de uso bastante básico de FTPClient 3.8.0 de Apache Commons:

FTPClient ftpClient = new FTPClient()

ftpClient.connect(hostName, hostPort)

if(FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
  ftpClient.setFileType(FTP.BINARY_FILE_TYPE)
  ftpClient.login(userName, password)

  FileOutputStream fos = new FileOutputStream("localFile.txt")

  ftpClient.retrieve("remoteFile.zip", fos)
}

El problema que tengo es que el archivo local resultante siempre es ~1400 bytes más pequeño que el archivo remoto de origen:

tamaño del archivo de origen: 134.914.722
tamaño del archivo de destino: 134.913.316

Esto no parece ser un problema del servidor ya que el comando ftp estándar de Linux recupera el archivo completo.

Tampoco parece estar relacionado con OutputStream porque tengo el mismo problema cuando guardo el contenido del archivo en memoria:

// aún demasiado pequeño
Byte[] fileContents = ftpClient.retrieveFileStream("remoteFile.zip").readAllBytes()

¿Qué podría hacer que FTPClient de Apache Commons permita la conectividad y la descarga de archivos, pero no recupere exhaustivamente todos los bytes del archivo de origen?

Gracias de antemano por su atención y respuesta.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede haber múltiples razones por las cuales el FTPClient de Apache Commons no está recuperando exhaustivamente todos los bytes del archivo fuente. Algunas posibles causas son:

    1. Problemas de red: Puede haber problemas de red que estén causando pérdida de datos durante la transferencia del archivo. Esto puede deberse a pérdida de paquetes, congestión de la red u otros factores.
    2. Configuración del servidor: El servidor puede estar configurado para limitar la cantidad de datos que se pueden transferir en una sola sesión. Esto puede ser debido a políticas de seguridad u otros factores.

    3. Codificación del archivo: Es posible que el archivo esté codificado con un formato que no es reconocido por el FTPClient. Esto puede resultar en pérdida o corrupción de datos durante la transferencia.

    4. Configuración del FTPClient: El FTPClient puede estar configurado con ajustes que limitan la cantidad de datos que se pueden transferir o el tiempo permitido para la transferencia.

    Para solucionar este problema, puedes intentar los siguientes pasos:

    1. Verificar si el problema se presenta de manera consistente en diferentes archivos y servidores. Si no es así, puede ser específico del archivo o servidor actual.

    2. Revisar los registros del servidor en busca de errores o problemas relacionados con la transferencia del archivo.

    3. Intentar usar un cliente de FTP diferente para recuperar el archivo y comparar los resultados.

    4. Verificar la configuración del FTPClient para asegurarse de que no está limitando la transferencia del archivo.

    5. Probar cambiar la codificación o formato de compresión del archivo para ver si afecta la transferencia del archivo.

    6. Considerar utilizar un protocolo o herramienta diferente para la transferencia de archivos, como SFTP o SCP, que pueden ser más confiables para archivos más grandes.

Comments are closed.