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踩过的坑 的相关文章

  • 安装、使用mongodb踩过的坑

    轻松一下 没用分布式架构之前 xff0c 你只有一个问题 xff1a 并发性能不足 用了分布式架构 xff0c 多出了一堆问题 xff1a 数据如何同步 主键如何产生 如何熔断 分布式事务如何处理 使用mongodb踩过的坑 今天对安装 x
  • FTPClient ftp.storeFile上传文件时服务器无响应的原因

    用FTPClient做FTP上传 xff0c 由quartz来定时运行 xff08 2分钟一次 xff09 xff0c 之前在生产环境调试没问题 xff0c 一些时间后现场反馈不能上传了 xff0c 当出现10个扫描文件的日志后就不再出现了
  • FTPClient踩过的坑

    一 ftpClient enterLocalPassiveMode public static final int PASSIVE LOCAL DATA CONNECTION MODE 61 2 官网关于该常量的说明 xff1a A con
  • ftpClient文件上传成功但总是返回false

    ftpClient storeFile newFileName is xff1b 文件上传成功但总是返回false flag span class token operator 61 span ftpClient span class to
  • java FTPClient使用中常见的问题

    1 storeFile返回false解决方法 xff08 1 xff09 在ftp连接成功后 xff0c 添加ftpClient enterLocalPassiveMode xff08 2 xff09 字符编码需要修改 xff1a ftpC
  • Java FTPClient上传图片

    首先要使用common net的包 xff1a FTP服务器搭建过程 xff1a https mp csdn net postedit 88722082 package com taotao test ftp import java io
  • FTPClient上传文件内容为空/损坏/缺失

    项目场景 xff1a 项目场景 xff1a 本地项目联调OA系统的时候 xff0c 在发送审批时会传送相关附件 xff0c 该附件由本地项目上传至FTP xff0c OA系统会根据我们提供的路径和文件名去FTP中找到该文件 问题描述 xff
  • 记ftpClient.storeFile(name,inputStream)被挂起,一直没有回复226 transfer complete造成阻塞

    最近现场一个问题折磨了我好久 xff0c 问题是这样的 程序使用异步线程从装置上取文件 xff0c 通过http连接从设备上读取流之后保存到ftp服务器上 xff0c 开始都是正常的 xff0c 过了半个多小时线程会堵塞 xff0c 导致所
  • QT连接MYSQL踩过的坑

    1 QT版本需要与mysql版本一致 xff0c 我测试成功的版本都是64位的情况 2 添加引用和链接 include 34 MainWindow h 34 include 34 ui MainWindow h 34 include inc
  • command ‘ifconfig‘ not found, but can be installed with:解决办法

    文章目录 报错 解决 报错 在ubuntu18 04中 使用ifconfig命令查看ip地址 但是报错了 解决 根据提示 使用 sudo apt install net tools 命令 安装网络工具 以上说明apt被某个进程锁住了 找到进
  • Create a PCL visualizer in Qt with QtDesigner

    这是PCL文档中的例程实现 原文地址 http pointclouds org documentation tutorials qt visualizer php more on qt and pcl 介绍一下环境 Ubuntu16 04
  • No module named 'tensorflow.contrib

    No module named tensorflow contrib 错误原因 解决方法 错误原因 这个错误可能是由 from tensorflow contrib learn python learn datasets import ba
  • Eclispse中Run on Server窗口让选择Server,但已经存在的选择不了

    对于这种问题 通常是因为版本不匹配造成的 jdk版本 Dynamic Web Modules版本 只要改到相应版本就好了 jdk7 时Dynamic Web Modules应设为2 5 如果无法修改 可以新建一个工程 在新建工程时选择Dyn
  • 使用最新版本Android NDK-r21 编译 opencv-3.3.1 + opencv_contrib-3.3.1

    由于新版本的NDK跟旧版本NDK编译的opencv存在兼容问题 所以需要使用最新的NDK重新编译opencv 方法步骤如下 Android NDK r21 编译 opencv 3 3 1 opencv contrib 3 3 1 1 sud
  • mysql-workbench使用中遇到的坑

    1 mysql workbench的安装 问题 1 弹出找不到C 的库 解决 1 的确缺少了这个库 按提示下载一个就好 安装框的左下角 有下载地址 2 有这个库 但就是找不到 可能是win10的问题 win10安装msi的文件需要管理员权限
  • 使用 FTPS 将文件从 Android 传输到服务器 [重复]

    这个问题在这里已经有答案了 我正在使用Apache Commons FTP 库在我的 Android 应用程序中 我通过 FTPS 建立连接 虽然它可以完美地连接到服务器 但在传输文件时遇到问题 出于安全原因 订购应用程序的客户端要求在使用
  • android 通过显式 TLS 进行 ftp 文件传输

    我在一遍又一遍地尝试让它工作但没有成功后发布这个问题 我尝试使用 apache commons 库在 android 中实现 FTP 文件传输 通信必须通过显式 TLS 身份验证完成 我可以成功登录 连接到服务器并列出文件 但每当我尝试获取
  • FTPClient的setFileTransferMode不生效

    以下代码旨在获取一个文件 任何文件都可以 但现在我只是使用图像 并将其上传到我的服务器 可以工作 等等 唯一的问题是传输后图片相当倾斜 主要建议是使用 FTPClient 的 setFileTranferMode 为 FTPClient B
  • ftp 客户端上出现 noClassDefFound 错误:org.apache.commons.net.ftp.FTPClient

    我正在开发一个将文件发送到 url 数据库的应用程序 我一开始只是想发送一张图片 目前 我在 java io 中遇到 noclassDefFound 错误 我已经尝试更新 java 再次删除和添加 jar 文件 并且我仔细检查了我的清单以获
  • GnuTLS 错误 -110:TLS 连接未正确终止

    我发现我的一个 Windows 服务没有连接到 Unix 服务器上的 FTP 位置 我在我的 PC 上运行了可执行文件 因为开发人员没有记录任何错误 并且我在尝试从 FTPWebRequest 获取响应时遇到超时错误C 中的对象 尝试使用

随机推荐

  • 安装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