FTP サーバーからファイルを取得するために、apache commons net ライブラリを使用しています。
ファイル全体をダウンロードする必要はありませんが、ヘッダーを読み取ってファイル サイズを判断するだけです。これを行うために使用しているライブラリは、メタデータ エクストラクタです。
問題は、client.completePendingCommand()を呼び出すと常に false が返されることですが、日付変数は正しく出力されます。メタデータ エクストラクタの開発者に問い合わせましたが、なぜ false を返すのかわかりません。誰か説明がありますか?偽を無視するだけでいいのかわかりませんか?
FTPClient client = new FTPHTTPClient(proxy settings);
InputStream stream = null;
try {
client.connect(FTPProperties.getInstance().getProperty("ftp.server"));
client.login(FTPProperties.getInstance().getProperty("ftp.username"), FTPProperties.getInstance().getProperty("ftp.password"));
client.enterLocalPassiveMode();
for (String path : paths) { //paths are the jpeg files to download
try {
stream = client.retrieveFileStream(p);
Metadata metadata = ImageMetadataReader.readMetadata(stream);
Directory directory = metadata.getDirectory(ExifSubIFDDirectory.class);
Date date = directory.getDate(ExifSubIFDDirectory.TAG_DATETIME_ORIGINAL);
System.out.println("DATE " + date);
} catch (IOException ex) {
Logger.getLogger(UploadImage.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if(stream != null) {
stream.close();
}
if (in != null) {
in.close();
}
if (!client.completePendingCommand()) {
Logger.getLogger("Error");
}
}
}
} catch (Exception ex) {
Logger.getLogger(UploadImage.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (client != null && client.isConnected()) {
client.disconnect();
}
}