FTPClient踩过的坑

2023-05-16

一、ftpClient.enterLocalPassiveMode()

    public static final int PASSIVE_LOCAL_DATA_CONNECTION_MODE = 2;

官网关于该常量的说明:

A constant indicating the FTP session is expecting all transfers to occur between the client (local) and server and that the server is in passive mode, requiring the client to connect to the server's data port to initiate a transfer

官网关于该方法的说明:

Set the current data connection mode to PASSIVE_LOCAL_DATA_CONNECTION_MODE . Use this method only for data transfers between the client and server. This method causes a PASV (or EPSV) command to be issued to the server before the opening of every data connection, telling the server to open a data port to which the client will connect to conduct data transfers. The FTPClient will stay in PASSIVE_LOCAL_DATA_CONNECTION_MODE until the mode is changed by calling some other method such as enterLocalActiveMode()

翻译如下:

将当前数据连接模式设置为被动本地数据连接模式。此方法仅用于客户端和服务器之间的数据传输。此方法导致在打开每个数据连接之前向服务器发出一个PASV(或EPSV)命令,告诉服务器打开一个数据端口,客户端将连接到该端口进行数据传输FTPClient将保持被动本地数据连接模式,直到通过调用enterLocalActiveMode()等其他方法更改模式为止。

二、ftpClient.listFiles()返回null

1、检查当前工作目录是否正确:

ftpClient.printWorkingDirectory(); 

若工作目录不正确,需切换目录:

ftpClient.changeWorkingDirectory(inpath);

2、检查文件传输模式是否是被动模式:

在ftpClient.listFiles();之前添加:

ftpClient.enterLocalPassiveMode();

三、ftpClient.retrieveFileStream(String filename)返回null

for (FTPFile ftpFile : ftpFiles) {

   inputStream = ftpClient.retrieveFileStream(ftpFile.getName());

   // ...省略其他代码

}; 

该代码只能成功下载第一个文件,从第二个文件开始inputStream都是null,原因如下:

在每次执行完下载操作之后,completePendingCommand()会一直在等FTP Server返回226 Transfer complete,但是FTP Server只有在接受到InputStream 执行close方法时,才会返回。所以一定先要执行close方法。不然在第一次下载一个文件成功之后,之后再次获取inputStream 就会返回null。

所以需要修改代码如下:

for (FTPFile ftpFile : ftpFiles) {

   inputStream = ftpClient.retrieveFileStream(ftpFile.getName());

   // ...省略其他代码

    inputStream.close();
    ftpClient.completePendingCommand();

}; 

四,带证书的FTPSClient使用

FTPSClient ftpsClient = new FTPSClient("SSL");
ftpsClient.connect(host, port);
ftpsClient.login(username, password)
//ftpsClient.setControlEncoding("UTF-8"); // 设置ftp字符集
//ftpsClient.setConnectTimeout(connectTimeout); // 设置连接超时时间,单位:毫秒
ftpsClient.enterLocalPassiveMode();// 设置被动模式,文件传输端口设置
//ftpsClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpsClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);  
ftpsClient.execPROT("P"); 
int reply = ftpsClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
            log.error("FTP server refused connection.");
            ftpsClient.logout();
            ftpsClient.disconnect();
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTPClient踩过的坑 的相关文章

随机推荐

  • 安装kali2.0之后,如何从Windows中通过SecureCRT工具远程到kali中呢?

    xfeff xfeff 1 在kali的终端输入 etc init d ssh status 回车 xff0c 用来查看kali中SSH服务状态 xff1b 由上图可知 xff0c kali Linux 默认情况下SSH服务是inactiv
  • 虚拟机权限不足,无法访问文件

    今天在使用虚拟机的时候 xff0c 出现了一个报错 xff0c 一下子懵逼了 xff0c 找度娘百度了一下 xff0c 各种答案五花八门 xff0c 但是根本木有卵用 xff0c 问题如下图 xff1a 解决方案是 xff1a 现在关掉虚拟
  • 如何使用英文界面的JMETER

    如何使用英文界面的JMETER JMETER启动时会自动判断操作系统的 locale 并选择合适的语言启动 xff0c 所以 xff0c 我们启动JMETER 后 xff0c 会出现一个倍感亲切的中文界面 但由于JMETER 本身的汉化工作
  • 在CMD命令行模式下运行.py文件,提示:无法初始化设备PRN

    在CMD命令行模式下运行 py文件 xff0c 提示 xff1a 无法初始化设备PRN 问题的重现步骤 xff1a 首次学习python xff0c 不知道 py文件是如何创建的 xff0c 故新建了一个txt文件 xff0c 添加完内容之
  • office 2010 Word,Excel的功能区突然消失了

    office 2010 Word Excel的功能区突然消失了 xff0c 点击展开功能区无效 在网上搜了很久没有找到解决办法 Office都卸载重装过还是无法解决 在网上找到一个方法 xff1a 将com加载项的ntkofficecont
  • IndentationError:expected an indented block

    xfeff xfeff 在用python写判断语句时 xff0c 报错 错误语句写法如下 xff1a 报错信息如下 xff1a 解决方案如下 xff1a 在print前面加上Tab 问题迎刃而解
  • kindeditor使用可能遇到的问题

    1 音视频上传不能播放问题 xff08 使用自定义video标签 xff09 更改kindeditor all min js中的 mediaImg方法 function mediaImg blankPath attrs if attrs s
  • manjaro21折腾笔记

    1 换源以及更新 1 1 配置镜像源 span class token function sudo span pacman mirrors i c China m rank 输入后会出现源列表选项 xff0c 全选即可 1 2 设置源 打开
  • 最简nvim配置

    1 安装nvim span class token function sudo span span class token function apt get span span class token function install sp
  • 竟然可以在Windows下用Nvim写代码?2.nvim基础插件配置

    在windows下用nvim写代码 使用wsl和terminal简直不要太方便 保姆级教学 一篇就够了 一 下载plug 可以用指令安装 curl fLo config nvim autoload plug vim create dirs
  • vscode国内源下载

    https az764295 vo msecnd net stable ea3859d4ba2f3e577a159bc91e3074c5d85c0523 VSCodeUserSetup x64 1 52 1 exe 将官方下载地址的域名更换
  • linux下搜狗拼音隐藏悬浮状态栏

    打开配置文件 vim config sogoupinyin conf env ini 找到以下内容 并修改为0 StatusAppearance 61 0 重启fcitx状态栏就消失了 killall fcitx fcitx
  • JavaScript笔记(2)

    7 对象 xff1a 对象的三种声明与调用方法 span class token comment 第一种声明方法 span span class token keyword let span ObjectName span class to
  • C++类与对象笔记

    C 43 43 类与对象笔记 本章主要讲了面向对象三大特性 xff1a 封装 xff0c 继承 xff0c 多态 C 43 43 认为万事万物都皆为对象 xff0c 对象上有其属性和行为 例如 xff1a 人可以作为对象 xff0c 属性有
  • C++基础笔记

    C 43 43 基础笔记 本章主要讲了在c的基础上 xff0c c 43 43 的拓扑基础的部分 xff0c 还有内存的分配 1 内存分区模型 C 43 43 程序在执行时 xff0c 将内存大方向划分为4个区域 1 代码区 xff1a 存
  • linux文件名匹配(通配符使用)

    当在使用命令行时 xff0c 有很多时间都用来查找你所需要的文件 xff0c 如ls find等 S h e l l提供了一套完整的字符串模式匹配规则 xff0c 或者称之为元字符 xff0c 当s h e l l遇到上述字符时 xff0c
  • Android指纹识别,兼容Android 6.0 - Android 11

    目录 前言 概览 1 类 2 权限 详细介绍 1 BiometricManager 属性和方法 是否可用的状态码 方法 2 BiometricPrompt 属性和方法 验证的结果常用错误码 不全 方法 实战 第一步 引入支持库 第二步 检查
  • Lottie-Android详解

    Lottie是什么 Lottie是Airbnb开源的一套跨平台的 完整的动画效果解决方案 xff0c 适用于 Android iOS Web 和 Windows 平台 xff0c 它解析使用 Bodymovin 导出为 json 的 Ado
  • 组合问题,n个元素分成k组-5

    题目要求 P n k 代表将n个元素分成k个非空分组集合的总集 例如 xff0c 当L 61 1 2 3 P xff08 3 xff0c 2 xff09 61 12 3 13 2 1 23 我们就假设此n个元素是从1到n P 4 3 61
  • FTPClient踩过的坑

    一 ftpClient enterLocalPassiveMode public static final int PASSIVE LOCAL DATA CONNECTION MODE 61 2 官网关于该常量的说明 xff1a A con