目录
- 需求背景
- 原理介绍
- 代码实现
1、需求背景
上送交易订单每日达600万,高峰期将近上千万,压缩包高达500M,如果网络上传超时,或者网络出现波动,需要实现断点继续上送功能。
2 原理介绍
那么字面意思,我们已经理解了,实际上ftp断点传输是怎么实现的呢?
实现起来也很简单,每次传输前,先检查下远程文件是否已经存在,如果存在了,那么我们就读取这个文件的大小。然后比较下带传输文件和现在的文件的大小。如果没有现在的文件大,那么可以认为之前上传的文件是完成的,本次不需要上传,但是,现在的文件要是比待上传的文件小的话,就需要重新或者继续上传了。选择继续上传的话,就是断点传输了。
3 代码实现
那么怎么实现这次上传接着上次上传呢?我们都知道,文件操作是有一个文件指针的,每次操作的时候,指针都会移动。因此,如果想实现继续接着上次上传文件,只需要将待上传的文件指针移动一个已经上传的文件的大小即可。明白了原理,代码也就好写了。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class ContinueFTP {
private FTPClient ftpClient = new FTPClient();
public ContinueFTP(){
//设置将过程中使用到的命令输出到控制台
this.ftpClient.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
}
/**
* java编程中用于连接到FTP服务器 此api最好加一个链接的超时时间
* @param hostname 主机名
* @param port 端口
* &