/dev ディレクトリに複数の pdf ファイルをアップロードするクライアント FTP サーバーがあります。PDF ファイルのパターンは [ORGANAIZATION_NAME]_CR.pdf です。これらのファイルを取得し、[ORGANAIZATION_NAME] に基づいて Liferay ドキュメント ライブラリにアップロードしています。
単一の ftp 接続を使用して複数のファイルを取得する際に問題に直面しています。初めて、現在のディレクトリ (/dev) のファイルのリストを取得し、Liferay ドキュメント ライブラリにアップロードします。しかし、2 番目のファイルを取得しようとすると、ファイルの長さをゼロとして返し、警告を送信する例外としてエラーをスローします。
以下のコードを参照してください。
public static void importReports() {
InputStream is = null;
System.setProperty("javax.net.debug", "ssl");
FTPSClient ftpClient = new FTPSClient();
try
{
// Store file on host
ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
// Connect to host
ftpClient.connect(hostname);
int reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
System.exit(1);
}
if (!ftpClient.login(loginname), PortletProps.get(password))) {
ftpClient.logout();
System.exit(1);
}
// Set protection buffer size
ftpClient.execPBSZ(0);
// Set data channel protection to private
ftpClient.execPROT("P");
try{
List<Organization> orgList = OrganizationLocalServiceUtil.getOrganizations(-1, -1);
for (Organization organization : orgList) {
String folderPath ="/dev";
String ftpfileName = organization.getName();
String ftpFilePath = folderPath+StringPool.FORWARD_SLASH+ftpfileName;
ftpClient.changeWorkingDirectory(folderPath);
// Enter local passive mode
ftpClient.enterLocalPassiveMode();
ftpClient.setRemoteVerificationEnabled(false);
FTPFile[] files = ftpClient.listFiles(folderPath);
for(FTPFile file : files)
{
if(file.isFile() && file.getSize() > 0 && file.getName().equalsIgnoreCase(ftpfileName))
{
try{
is = ftpClient.retrieveFileStream(ftpFilePath);
if (Validator.isNotNull(is)) {
ftpClient.completePendingCommand();
}catch(SocketException se)
{
LOGGER.info("SocketException :"+se.getMessage());
}
}
}
}
// Logout
ftpClient.logout();
// Disconnect
ftpClient.disconnect();
}
catch(PortalException e)
{
LOGGER.info(e.getMessage());
} catch (SystemException e) {
LOGGER.info(e.getMessage());
}
} catch (IOException ioe) {
LOGGER.info(ioe.getMessage());
}
finally
{
try {
// Logout
ftpClient.logout();
// Disconnect
ftpClient.disconnect();
} catch (IOException e) {
LOGGER.info(e.getMessage());
}
}
}