FTP - Image

3 respostas
pedroroxd

Pessoal, eu tenho um diretorio no FTP soh com imagens, e estou querendo adicionar ela numa lista de imagens pra exibir depois...
Fiz assim:

public ArrayList<Image> getFTP(String local) {

	FTPClient ftp = new FTPClient();
	
	
	ArrayList<Image> myArr = new ArrayList<Image>();
	
	        try {
	             ftp.connect(ip, 21);
	             ftp.login(login, password);        

	            ftp.changeWorkingDirectory(local);
	            
	            String[] lista = null;
	            lista = ftp.listNames();
	           
	            for (int i=0; i<lista.length; i++) {
	             System.out.println(lista[i]); //imprimindo pra ver se ta certo
	             InputStream is = new BufferedInputStream(ftp.retrieveFileStream(lista[i]));  
	             Image imagem = ImageIO.read(is);
	             myArr.add(imagem);  
	            }
	            
	            ftp.logout();     
	        } catch (SocketException e) {
	             e.printStackTrace();
	        } catch (IOException e) {
	             e.printStackTrace();
	        } catch (Exception e) {
	             e.printStackTrace();
	        }
	        
	    	return myArr;
	     }
	

}

Olhem o console: (Akela linha comentada do system.out... imprime Ford Mustang, que eh a primeira imagem)

Console:
Ford Mustang-3.7-Prata-1.jpg
java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.get(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.checkTablesOnly(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.gotoImage(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readHeader(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(Unknown Source)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
at javax.imageio.ImageIO.read(Unknown Source)
.
.
.

O erro se da na linha
Image imagem = ImageIO.read(is);
O que tem de errado nela? Vlws

3 Respostas

N

Opa, cara acho que você precisa “bufferizar” essa imagem, precisa tranferir os bytes da imagem antes de carrega-la no InputStream. Pelo que eu entendi, você tem uma lista de String com os nomes das imagens e não as imagens em si.

pedroroxd

Eu tenhu uma lista de imagens tambem…

ArrayList<Image> myArr = new ArrayList<Image>();

Eu vou para o diretorio da imagem:

ftp.changeWorkingDirectory(local);

Pego a lista com os nomes dos arquivos la de dentro

String[] lista = ftp.listNames();

Voce passa o nome do arquivo que voce quer dar retrieve (por isso lista[i])

InputStream is = new BufferedInputStream(ftp.retrieveFileStream(lista[i]));

Leio o Input Stream, gravo em uma Image

Image imagem = ImageIO.read(is);

E adiciono ao Array

myArr.add(imagem);

Qual seria sua sugestao?

N

Opa, e ae cara blz?

Então olhei aqui para relembrar pois tem algum tempo que não uso ftp via java, mas, eu acredito que você precisa usar algo parecido com o que segue abaixo.

FileOutputStream fos = new FileOutputStream(lista[i]);
ftp.retrieveFile("/" + filename, fos);
Criado 19 de abril de 2011
Ultima resposta 19 de abr. de 2011
Respostas 3
Participantes 2