Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FTPClient.retriveFile question 
V
    Опции темы
rang3r
Дата 21.6.2012, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



Всем привет.
Надо выкачать картинки с фтп сервера. 
Написал метод, который должен скачивать картинки с сервера.
Но вот незадача, FTPClient.retriveFile() возвращает всегда false. И соответственно не заполняет OutputStream.
Написал метод закачки через URL и URLConnection, все работает как надо.
Кто сталкивался, подскажите в чем ошибка ? 
Код:
Код

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPFileFilter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.*;
import java.util.*;

public class Test {

    /**
     * ftp://user:password@host:port/filePath;type=i.
     */

    public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();
        testDownloadImgsViaFTPClient();
        System.out.println("FTPClient time : " + (System.currentTimeMillis() - start));
        start = System.currentTimeMillis();
        testDownloadImgsViaURL();
        System.out.println("URL Time: " + (System.currentTimeMillis() - start));
    }

    private static void testDownloadImgsViaURL() throws IOException {
        List<String> names = Arrays.asList("1068000.jpg", "1096000.jpg", "1097000.jpg");
        List<BufferedImage> bufferedImages = new ArrayList<BufferedImage>();
        for (String str : names) {
            URL url = new URL("ftp://login:password@some-host/imgs/" + str + ";type=i");
            URLConnection urlConnection = url.openConnection();
            BufferedImage bufferedImage = ImageIO.read(urlConnection.getInputStream());
            bufferedImages.add(bufferedImage);
        }
        System.out.println(bufferedImages.size());
    }

    private static void testDownloadImgsViaFTPClient() {
        FTPClient client = new FTPClient();
        final Set<String> names = new HashSet<String>(Arrays.asList("1068000.jpg", "1096000.jpg", "1097000.jpg"));
        FTPFileFilter ftpFileFilter = new FTPFileFilter() {
            @Override
            public boolean accept(FTPFile ftpFile) {
                return names.contains(ftpFile.getName());
            }
        };

        try {
            client.connect("some-host");
            client.login("login", "password");
            client.enterLocalPassiveMode();
            List<BufferedImage> bufferedImages = new ArrayList<BufferedImage>();
            FTPFile[] ftpFiles = client.listFiles("imgs", ftpFileFilter);
            for (FTPFile ftpFile : ftpFiles) {
                ByteArrayOutputStream byteArrayOutputStream = null;
                ByteArrayInputStream byteArrayInputStream = null;
                try {
                    byteArrayOutputStream = new ByteArrayOutputStream();
                    client.setFileType(FTP.BINARY_FILE_TYPE);
                    client.setFileStructure(FTP.FILE_STRUCTURE);
                    client.setFileTransferMode(FTP.BLOCK_TRANSFER_MODE);
                    System.out.println(client.retrieveFile(ftpFile.getName(), byteArrayOutputStream));
                    byteArrayOutputStream.flush();
                    byte[] bArray = byteArrayOutputStream.toByteArray();
                    byteArrayInputStream = new ByteArrayInputStream(bArray);
                    BufferedImage bufferedImage = ImageIO.read(byteArrayInputStream);
                    bufferedImages.add(bufferedImage);
                }

                finally {
                    if (byteArrayOutputStream != null)
                        byteArrayOutputStream.close();
                    if (byteArrayInputStream != null)
                        byteArrayInputStream.close();
                }
            }
            System.out.println(bufferedImages.size());
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                client.disconnect();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}



PM MAIL Skype   Вверх
rang3r
Дата 21.6.2012, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 2.4.2009

Репутация: нет
Всего: нет



Вопрос снимается.
Надо было вызвать client.changeWorkDirectory("imgs");
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.