Problemas com FTPClient

4 respostas
dahenz

Bom dia!

Estou com um problema que está me tirando o sono, o problema é o seguinte:

Preciso fazer a copia de um arquivo PDF de um servidor para outro, LINUX e estou utilizando a classe FTPClient para executar essa transferência.

Estou utilizando o código abaixo:

FTPClient ftp = new FTPClient();
						        ftp.connect( "servidor.com.br" );
						        ftp.login( "root", "123" );

						        FileOutputStream fos = new FileOutputStream(FacesUtil.getCurrentDirectory()+ File.separator +MySQLDAO.getNomeArquivo(pathPdf));
						        
						        ftp.retrieveFile(pathPdf, fos);

								HttpServletResponse res = (HttpServletResponse)FacesContext.getCurrentInstance().getExternalContext().getResponse();     

								res.setHeader("Content-Disposition","atachment; filename=arquivo.pdf"); 
								res.setContentType("application/pdf");

								String direcione = FacesUtil.getCurrentDirectory()+File.separator+MySQLDAO.getNomeArquivo(pathPdf);
								try {

									ServletOutputStream out = res.getOutputStream();  

									File file = new File(direcione);
									out.write(fileToByte(file));
									out.flush();  
									out.close();  

								} catch (IOException ex) {   
									ex.printStackTrace();  
								} catch (Exception e1) {
									e1.printStackTrace();
								}  

								FacesContext faces = FacesContext.getCurrentInstance();
								faces.renderResponse();
								faces.responseComplete(); 
								
								limparCampos();
								removerArquivo(pathPdf);
								ftp.disconnect();

Acontece que o método retriveFile não está funcionando!

É criado o arquivo no diretório mas não é copiado o arquivo do servidor remoto...

O que pode ser???

4 Respostas

Grinvon

Ola dahenz,

Despois de criar a conexão, e estar já em mão com a string do path do arquivo, eu faço uma gravação em ByteArrayOutputStream, como segue esse exemplo que eu tinha criado:

/**
     * Obtêm uma OutputStream de arquivo FTP
     * @param pCaminho
     * @param pArquivo
     * @return
     * @throws NegocioException
     */
    public static OutputStream obterArquivoFTP(String pCaminho, String pArquivo) throws NegocioException {
        FTPClient lFtp = null;
        OutputStream lOut = new ByteArrayOutputStream();

        try {
            lFtp = obterConexaoFTP();

            //configuração de linguagem
            FTPClientConfig lConfigure = new FTPClientConfig();
            lConfigure.setServerLanguageCode("pt");

            lFtp.setFileType(FTP.BINARY_FILE_TYPE);
            lFtp.configure(lConfigure);
            lFtp.cwd(pCaminho);

            lFtp.retrieveFile(pArquivo, lOut);
            return lOut;

        }   catch(NegocioException ex) {
                throw new NegocioException(ex.getMessage());
        }   catch(Exception ex) {
                throw new AmbienteException(ex.getMessage(), ex);
        } finally {
            try {
                lFtp.disconnect();
            } catch (IOException ex) {
                throw new AmbienteException(ex);
            }
        }
    }

Olhe esse código, e veja se consegue aproveitar o conceito dele em seu projeto. Qualquer coisa, poste aí.

Boa sorte.

dahenz

Olá Grinvon!!!

Não consigo achar a classe FTPClientConfig…

Quero fazer da mesma maneira que fizeste para testar!!!

Obrigado

dahenz

Acho que é importante…

Quando eu testo o comando acima no windows 7 funciona belezinha…

Quando dou um deploy da aplicação no servidor que é Linux, a aplicação cria o arquivo, mas o retrieveFile parece que nao funciona, pois o arquivo fica vazio…

Alguem sabe o que pode ser???

dahenz

Como faço um FTPClient no java com FTP Passivo??? pode ser isso…

Obrigado

Criado 28 de abril de 2010
Ultima resposta 3 de mai. de 2010
Respostas 4
Participantes 2