您所指的 onDownloadStart 示例似乎已过时 . 首先,使用的 FtpletEnum 类是 ftplet-api 的早期版本的一部分 . 较新版本不再拥有它 . 至少我无法找到它 .
尽管如此,仍然可以从客户端获取上传的文件 . 当覆盖 DefaultFtplet 的 onUploadStart 方法时,您可以从会话中请求 DataConnection .
OutputStream outputStream = new ByteArrayOutputStream();
DataConnectionFactory connectionFactory = session.getDataConnection();
try {
DataConnection dataConnection = connectionFactory.openConnection();
dataConnection.transferFromClient(session, outputStream);
// now outputstream contains the uploaded file and you could
// store it in S3 if you wish
} catch (Exception e) {
e.printStackTrace();
} finally {
connectionFactory.closeDataConnection();
}
请记住,如果 onUploadStart 方法返回SKIP,您可能还必须通过响应代码通知客户端 . 来自Ftplet docs
将在文件上载之前调用此方法 . 文件名可以从请求参数中获取 . 我们可以从请求中获取数据输入流 . 这将在权限检查之前调用 . 在STOR命令期间调用此方法 . 如果该方法返回SKIP,则必须在处理之前和之后发送响应 . 例如,在打开数据输入流之前,该方法必须用响应代码150通知客户端 . 类似地,在数据传输之后,该方法必须用响应代码226通知客户端 . 如果有任何错误,则方法应该发送不同的响应代码,如450,425,426,551 .