apache-ftpserver 显示进度
时间: 2023-07-27 07:06:26 浏览: 86
c#开发的FTP 有进度条
Apache FtpServer是一个开源的、灵活的、可扩展的FTP服务器软件,可以用Java语言编写,支持多种操作系统平台。在Apache FtpServer中,可以通过实现FTP文件传输监听器来获取上传和下载文件的进度。
下面是一个获取上传进度的示例代码:
```java
public class MyFtpListener implements FtpFileUploadListener {
private long totalBytes = 0L;
private long transferredBytes = 0L;
private FtpIoSession ftpSession;
public MyFtpListener(FtpIoSession ftpSession) {
this.ftpSession = ftpSession;
}
public void fileUploadStarted(FtpIoSession session, FtpFileUploadRequest request) {
totalBytes = request.getFileItem().getSize();
transferredBytes = 0L;
}
public void fileUploadProgress(FtpIoSession session, FtpFileUploadRequest request, long transferredBytes) {
this.transferredBytes = transferredBytes;
float progress = (float)transferredBytes / (float)totalBytes * 100.0f;
ftpSession.write(new DefaultFtpReply(FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, String.format("%.2f%%", progress)));
}
public void fileUploadFinished(FtpIoSession session, FtpFileUploadRequest request) {
ftpSession.write(new DefaultFtpReply(FtpReply.REPLY_226_CLOSING_DATA_CONNECTION, "Upload finished."));
}
//省略其它方法...
}
```
在上面的代码中,我们实现了FtpFileUploadListener接口,重写了fileUploadStarted、fileUploadProgress和fileUploadFinished三个方法,其中fileUploadProgress方法用于获取上传文件的进度信息,通过FTP会话对象ftpSession将进度信息发送给客户端。
在实际使用中,我们可以通过配置FTP服务器的监听器来注册上面的MyFtpListener,如下所示:
```java
listenerFactory.setFtpFileUploadListener(new MyFtpListener(session));
```
这样,在客户端上传文件时,就可以实时获取上传进度信息了。
阅读全文