业务需求是这样的,从一个服务器下载文件到本地,但有时候文件很大,需要查看下载的进度。
这里只提供一下思路,有问题的可以留言交流。
1.项目用的是ssm架构(springboot+spring+mybatis)
2.sftp用到的是jsch这个包
3.下载的时候用ajax来请求,因为ajax的success回调函数只有在请求结束的时候才能调用,所以无法实时监控下载的情况。
4.想到通过ajax的beforeSend这个回调函数来增加一个监控线程,设定一个setInterval,每隔1秒请求后台来获取下载的进度,主要代码如下:
beforeSend: function(data) {
setInterval(function(){
//TODO 请求后台,获取下载的进度情况
},1000);
},
5.后台controller层增加一个请求接口,来获取下载的进度情况
@RequestMapping(value = "/checkProgress")
@ResponseBody
public String checkProgress() {
//TODO 获取下载的进度信息
}
6.jsch本身提供了一个SftpProgressMonitor接口来监听下载的进度信息,所以写一个类来实现这个接口。
public class Monitor implements SftpProgressMonitor {
@Overrid