我所使用的是org.apache.commons.net.ftp.FTPClient。  查了资料还有其余几个FTPClient,其余的先不展开。

1.ftpClient.changeWorkingDirectory一直返回false.

我的解决方法是所传入的参数不能是ftp://ip地址/data/vcode/  这种形式的,而应该是/home/commonservice/data/vcode/这种形式的。网上查了很多方法也试了很多,都不对本次开发有效,有时候,是自己参数传的不对导致。

2.从ftp服务器下载含图片的zip包,下载下来后解压失败,说是文件已损坏。

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);加上这一句,以二进制的形式

3.ftpClient.retrieveFileStream 读取服务器中的命名文件

有以上这一行代码的话必须加

is.close();

   ftpClient.completePendingCommand();

   这两行,否则接下来的 ftpClient的操作就会失败

4.从ftp服务器下载的zip包到本地解压,解压失败

   有时不是你代码有问题,而是ftp服务器上的这个zip包本来就解压不出来。我就遇到这个问题了,查了半天代码都没查出来。

5.主动模式和被动模式的概述

PORT(主动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。

PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。
---------------------

两种模式的比较
    从上面的运行原来看到,主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。

主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。

被动模式只需要服务器端开放端口给客户端连接就行了。

参考文献 http://www.cnblogs.com/mawanglin2008/articles/3607767.html

6.附上FTPClient的文档

http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#changeWorkingDirectory(java.lang.String)

纪念使用FTPClient工具所遇到的的更多相关文章

  1. FTPClient 工具类

    package com.photoann.core.util; import java.io.BufferedInputStream; import java.io.File; import java ...

  2. FTPClient工具类

    package com.vcredit.ddcash.server.commons.net; import com.vcredit.ddcash.server.commons.model.FtpPar ...

  3. FTPClientUtil FTPclient工具

    package com.ctl.util; //须要commons-net-3.0.1.jar import java.io.*; import java.net.*; import java.uti ...

  4. FTP上传心得

    最近出了一个问题就是在本地上传FTP没有一点问题 可是部署到服务器上.上传的时候总是false.解决办法 ftp.enterLocalPassiveMode();boolean storeFile = ...

  5. 【大话QT之十六】使用ctkPluginFramework插件系统构建项目实战

    "使用ctkPluginFramework插件系统构建项目实战",这篇文章是写博客以来最纠结的一篇文章. 倒不是由于技术都多么困难,而是想去描写叙述一个项目架构採用ctkPlugi ...

  6. 那些年伴我一起成长的SAP装备

    今天这篇文章无关技术,我们来聊聊SAP装备,即打上了SAP logo的那些物品. 但凡在SAP圈子工作过一段时间的从业者们,手上或多或少都拥有一些此类装备.Jerry当然也不例外,这些装备无论物品本身 ...

  7. FtpServer穿透内网访问配置踩笔记

    FtpServer穿透内网访问配置踩笔记 引言 FtpServer是服务器文件远程管理常用方式. 以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解. 然 ...

  8. 入坑python 自己写的小工具,纪念一下

    这个程序的功能是可以从表格中读取某一列数据,传到IDs 这一个参数里,然后在url中获取相应的请求值,并打印 import urllib.request import json import xlrd ...

  9. Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...

随机推荐

  1. require的特点

    通过把要加载的文件看作一个“功能”而不是一个文件,require对于用Ruby编写的扩展和用C语言编写的扩展都用一样的方式.另外,.rb扩展名的文件与其它扩展名为.so..dll或.bundle的文件 ...

  2. Sql Server 2012 集群配置

    基于Windows Server 2008 R2的WSFC实现SQL Server 2012高可用性组(AlwaysOn Group) 2012年5月 微软新一代数据库产品SQL Server 201 ...

  3. QT之两种模态对话框的调用

    模态对话框:就是没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互. 1.show调用 LoginDialog *dlg = new LoginDialog(); dlg->setModa ...

  4. vs2017 创建虚拟目录失败 http//locXXXXXX,vs2015 无法访问IIS源数据

    两个版本ide打开的错误提示不一样,但是一个解决都解决了 这个问题折磨了我接近五个小时 终于找到了解决方案,在百度上面搜的都没什么鸟用,最终还是在stackoverflow找到了解决方案,附上连接,虽 ...

  5. Android BLE dfu升级

    dfu升级适用于nordic  nRF51  nRF52 的系统,github上提供了相关升级的库https://github.com/NordicSemiconductor/Android-DFU- ...

  6. Knowledge From Practice(rf,fiddler)

     1.较精准定位 2.关于Appium+RF的轴表达式 child:选取当前节点的所有子元素 parent:选取当前节点的直接父元素 descendant:选取当前节点的所有后代元素 ancestor ...

  7. int 和 Integer

    现状1+1=?,不加思索2.有一个数字要存储在程序里,不加思索int.那为什么java要弄一个Integer类型出来?有什么用?怎么用?差别在哪儿?度娘说java提供了两种数据类型,一种是值类型,一种 ...

  8. idea 从git上checkout项目下来,project没有文件目录结构

    1.去到 查看sdk有没有配置 查看该部分是否是空的,如果没有显示项目,添加导入项目

  9. UVa439——骑士的移动

    简单bfs #include <iostream> #include <cstring> #include <string> #include <map> ...

  10. 前端-----js

    一 补充css的层叠性 权重: 行内样式(1000)>内接样式(如link等...) id(100)>class(010)>标签(001) 如果同是继承来的,距目标越近的优先级越高 ...