Carga de un archivo en blanco cuando la ruta FTP tiene más de un subdirectorio

El siguiente código carga el archivo en el servidor FTP

public class UploadFile {
    static ResourceBundle rsBundle = ResourceBundle.getBundle("com.mindcraft.resources.resources");
    public void upload(String host,String username,String pwd,String inputfile,String uploadpath,String zip_filename)
    {      
        //String zip_file_name= rsBundle.getString("zip_filename");
        FTPClient ftp=new FTPClient();
        try {          
            int reply;  
            ftp.connect(host); 
            ftp.login(username, pwd); 
            reply = ftp.getReplyCode();
            System.out.println("reply1" + reply);
            if(!FTPReply.isPositiveCompletion(reply)) 
            {             
                ftp.disconnect();           

            }           
            System.out.println("FTP server connected."); 
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            InputStream input= new FileInputStream(inputfile);

            System.out.println("Directory.." + ftp.printWorkingDirectory());

            String dirTree=uploadpath;
            boolean dirExists = true;
            String[] directories = dirTree.split("/");
            for (String dir : directories )
            {
                if (!dir.isEmpty() )
                {
                    if (dirExists)
                    {
                        dirExists = ftp.changeWorkingDirectory(dir);
                        ftp.storeFile(dirTree+zip_filename,input);
                        System.out.println("1..");
                    }
                    if (!dirExists)
                    {

                        System.out.println("dir tree" + ftp.printWorkingDirectory());


                        if (!ftp.makeDirectory(dir))
                        {

                            throw new IOException("Unable to create remote directory '" + dir + "'.  error='" + ftp.getReplyString()+"'");
                            }
                        if (!ftp.changeWorkingDirectory(dir))
                        {

                            throw new IOException("Unable to change into newly created remote directory '" + dir + "'.  error='" + ftp.getReplyString()+"'");
                        }
                        System.out.println("dir tree" + ftp.printWorkingDirectory());
                        ftp.storeFile(dirTree+zip_filename,input);
                    }

                    }
                }      

            System.out.println( ftp.getReplyString() );
            input.close();
            ftp.logout();        
            } 
        catch(Exception e) 
            {                      
            System.out.println("err"+ e);          
            e.printStackTrace();     
            }
        finally 
        {
            if(ftp.isConnected())
            {
                try
                { 
                    ftp.disconnect();

                }
                catch(Exception ioe)
                {

                }

            }

        }
        } 
}

Funciona bien cuando la ruta de carga tiene una carpeta, por ejemplo. /folder1/

Pero carga un archivo en blanco del byte 0 cuando hay una subcarpeta o más de un directorio, por ejemplo. /folder1/folder2/

¿¿Cuál puede ser el problema??

Respuesta 1

ftp.storeFile(dirTree+zip_filename,input);debe llamarse después de forcrear todos los subdirectorios e ir al directorio correcto.

Por cierto, podría haber ayudado a introducir una función makeAndGoToDirectory.

Respuesta: 2

En mi aplicación spring-boot + reactjs, he usado Spring Security para fines de autenticación y gestión de roles. La aplicación funciona bien, pero requiere autenticación exitosa para cargar valores para ...

Estaba trabajando en la aplicación web. Intenté eliminar la duplicación de jar de mi guerra con WEB-INF / lib / *. Jar. Esto me ayudó a excluir el frasco de mi guerra. Mientras desplegaba el oído en websphere, tuve ...

Ok, entonces, ¿alguien puede explicarme la brecha en mi conocimiento aquí? Inicialmente, el siguiente ejemplo estaba tratando de sincronizar un método de instancia, pero luego me di cuenta de que generaba una nueva instancia y, por lo tanto, un ...

Estoy ejecutando OpenSUSE 12.1 de 64 bits, hoy descargué el último Scala 2.9.2 del sitio web oficial, después de desempacar el tgz e ir al directorio scala-2.9.2 / bin, ejecuté "scala" y obtuve esto ... .