Всем привет. Надо выкачать картинки с фтп сервера. Написал метод, который должен скачивать картинки с сервера. Но вот незадача, 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); } } } }
|
|