连接、登陆、登陆之后取得登陆状态(成功、失败)
如果登陆失败,则关闭ftp连接。
登陆成功之后,跳转到目录下 ftpClient.changeWorkingDirectory("/" + rootPath + "/" + filePath);
目标文件和该目录下的所有文件进行比较
但是有一个问题,就是文件很多的话,这样一比较会导致很慢很慢,性能不好。所以这里直接就省去了这一步骤。
FTPFile[] fs = ftpClient.listFiles(); //当天目录下文件太多的话,导致读取很慢
for (FTPFile ff : fs) {
String f = new String(ff.getName().getBytes(Charset.forName("ISO-8859-1")), Charset.forName("GBK"));
if (f.equals(fileName)) {
InputStream inputStream = ftpClient.retrieveFileStream(ff.getName());
}
}
读取文件采用ftpClient.retrieveFileStream
有问题,具体待研究
所以采用下面这种方式读取文件流
ByteArrayOutputStream byteArrayOutputStream =new ByteArrayOutputStream();
ftpClient.retrieveFile(fileName, byteArrayOutputStream);
InputStream inputStream = byteArrayOutputStream.toInputStream();
将读出来的IO流写入压缩包中,直接返回压缩包流回去,前端会直接下载下来。
进入文件目录的时候,尤其要注意:使用的是绝对路径还是相对路径
注:使用FTP上传下载文件,服务器端口会被大量占用,关于计算机端口:
服务器端口数量
网友评论