FileOutputStream e PDF [RESOLVIDO]

7 respostas
L

Buenas!

Estou baixando de um FTP um arquivo .pdf, e gostaria de salva-lo no PC, porém quando eu salvo, ele fica como se estivesse corrompido, vejam só:

FileOutputStream os = new FileOutputStream(c:\temp\arquivo.pdf);

boolean status = ftp.retrieveFile("/Exemplo/teste.pdf",os);

os.flush();

os.close()

Process p = Runtime.getRuntime().exec(cmd.exe /C c:\temp\arquivo.pdf);]

No servidor FTP, ele está intacto.

7 Respostas

E

Se estiver usando o Windows, não se esqueça de setar o FTP no modo binário :slight_smile:

A

cara,

se essa sua ftp te retornar um InputStream, vc pode usar esse metodo que eu to te passando, acho q resolve seu problema.

public static void copiarArquivo() throws Exception{
		BufferedOutputStream out = null;
		try {
			InputStream stream = //o arquivo em stream
			BufferedInputStream in = new BufferedInputStream(stream);
			FileOutputStream file = new FileOutputStream("Nome Arquivo");
			 
			out = new BufferedOutputStream(file);
			int i;
			while ((i = in.read()) != -1) {
			    out.write(i);
			}
			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			if(out != null){
				out.close();
			}
		}
	}

t+

L

O que descobri até então, é que o problema é no Stream, já que se eu usar um arquivo .txt convertido para PDF, ele abre normalmente. Dá problema quando tem imagem no meio.

L

Como seta o ftp em modo binário?

L

Funcionou bem para arquivos locais, só que o meu problema é não conseguir trazer o arquivo hospedado no FTP de forma integra. Não achei método algum de trocar de modo texto para modo binário.

alissonvla:
cara,

se essa sua ftp te retornar um InputStream, vc pode usar esse metodo que eu to te passando, acho q resolve seu problema.

public static void copiarArquivo() throws Exception{
		BufferedOutputStream out = null;
		try {
			InputStream stream = //o arquivo em stream
			BufferedInputStream in = new BufferedInputStream(stream);
			FileOutputStream file = new FileOutputStream("Nome Arquivo");
			 
			out = new BufferedOutputStream(file);
			int i;
			while ((i = in.read()) != -1) {
			    out.write(i);
			}
			out.flush();
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		} finally {
			if(out != null){
				out.close();
			}
		}
	}

t+

L

É muito simples!

ftp.setFileType(FTPClient.BINARY_FILE_TYPE);

Resolveu todo o problema abraço aos que ajudaram!

E

Falta de olhar na documentação. Estou supondo que você esteja usando o FTPClient:

http://commons.apache.org/net/apidocs/org/apache/commons/net/ftp/FTPClient.html#setFileType(int)

Se não estiver, olhe a documentação da classe que você estiver usando, por favor.

Criado 30 de setembro de 2011
Ultima resposta 3 de out. de 2011
Respostas 7
Participantes 3