一.首先登录ftp服务器:命令行 lftp user@ip  上传:put  下载: get

二. 关于FTP传输模式与传输的方式

众所周知,FTP传输有两种工作模式,Active Mode和Passive Mode(主动模式和被动模式),简单描述连接过程如下:

  1.主动模式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 客户端在命令链路上用PORT命令告诉服务器:“我打开了***端口,你过来连接我”。于是服务器从20端口向客户端的***端口发送连接请求,建立一条数据链路来传送数据。

  2.被动模式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时, 服务器在命令链路上用PASV命令告诉客户端:“我打开了***端口,你过来连接我”。于是客户端向服务器的***端口发送连接请求,建立一条数据链路来传送数据。

了解模式的目的,是为了了解端口。使用 FTP 传输时,至少会使用到两个 Port 来建立连接通道:

  • 一个为指令通道(Command Channel),默认使用 Port 21 建立,用来传输 FTP 指令,例如:列出清单(LIST)、变更目录(CWD)、取得目前的目录(PWD)、......等。

  • 另一个为数据通道(DATA Channel),默认使用 Port 20,但是会因 FTP Client 选择使用的模式不同而有所不同.

  1.ASCII传输方式

  假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

  但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。

  2.二进制传输模式

  在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行

  文件到Windows系统,在对方系统上,此文件不能执行。

  如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果

  传输二进制文件,所有的位都是重要的

三.不多做解释,上传一段FTPS的代码

public class FtpsUtil {

    private static final Logger LOGGER = LoggerFactory.getLogger(FtpsUtil.class);

    /**
* 暴露的方法
*/
public boolean uploadFile(InputStream in, String dirName, String remoteFileName, String adder, int port, String userName, String userPassword) {
FTPSClient ftpClient = null;
try { LOGGER.info("uploadFile addr:{},port:{},userName:{},userPassword:{}", adder, port, userName, userPassword);
ftpClient = ftpConnection(adder, port, userName, userPassword); makeDirectory(ftpClient, dirName);
ftpClient.changeWorkingDirectory(dirName); boolean isUploadSuccess = ftpPut(ftpClient, remoteFileName, in);
if (isUploadSuccess) {
return true;
}
} catch (Exception e) {
LOGGER.error("上传文件失败了。。upload file Exception:", e);
} finally {
ftpClose(ftpClient);
}
return false;
} private FTPSClient ftpConnection(String adder, int port, String userName, String passWord) {
FTPSClient ftpClient = null;
try {
ftpClient = new FTPSClient(false);
ftpClient.connect(adder, port);
ftpClient.login(userName, passWord);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.execPROT("P");
ftpClient.enterLocalPassiveMode();
LOGGER.info("ftpconnection success");
} catch (Exception e) {
LOGGER.error("ftpconnection EXception:", e);
}
return ftpClient;
} private void makeDirectory(FTPSClient ftpClient, String dirName) {
try {
ftpClient.makeDirectory(dirName);
LOGGER.info("创建文件夹成功:{}", dirName);
} catch (Exception e) {
LOGGER.error("目录已经存在,无需创建");
}
} private boolean ftpPut(FTPSClient ftpClient, String filename, InputStream in) throws IOException {
try {
boolean result = ftpClient.storeFile(filename, in);
if (result) {
LOGGER.info("upload file success");
}
return result; } catch (Exception ex) {
LOGGER.error("上传文件发生异常了。。。", ex);
return false;
} finally {
if (in != null) {
in.close();
}
}
} private boolean ftpClose(FTPSClient ftpClient) {
try {
if (ftpClient != null) {
ftpClient.logout();
ftpClient.disconnect();
}
LOGGER.info("ftpClose success");
} catch (Exception e) {
LOGGER.error("ftpclose Exception:", e);
return false;
}
return true;
}
}

FTPS链接服务器的更多相关文章

  1. SQL链接服务器

    最近做项目,需要对两个数据库进行同步操作,所以采用在Server SQL中建立链接服务器方式实现. 链接服务器,可以直接访问/操作其他服务器上的数据库表. 1.连接SQL Server链接服务器 EX ...

  2. SQL Server 链接服务器的安全

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 安全设置(Security Settings) 实现效果:用户A能看见能使用,B用户不能看见这 ...

  3. sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器)

    sqlserver 多库查询 sp_addlinkedserver使用方法(添加链接服务器) 我们日常使用SQL Server数据库时,经常遇到需要在实例Instance01中跨实例访问Instanc ...

  4. Sqlserver通过链接服务器访问Oracle的那些事儿

    前言: 1.不经历风雨,怎能见彩虹. 2.充分利用BaiDu.google等搜索引擎查找资料并整合分析! 3.世上无难事只怕有心人! 本文由来:笔者在研究SQLSERVER链接服务器到oracle并使 ...

  5. SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

    我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked S ...

  6. SQL SERVER 2000通过链接服务器发送邮件出现错误

    案例环境: 服务器A系统: Windows Server 2000 数据库版本 : Microsoft SQL Server  2000 - 8.00.2282 (Intel X86) 服务器B系统: ...

  7. [翻译]——SQL Server使用链接服务器的5个性能杀手

    前言: 本文是对博客http://www.dbnewsfeed.com/2012/09/08/5-performance-killers-when-working-with-linked-server ...

  8. 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务

    在windows2003下执行分布式事务的时候出现如下情况. 一. 问题现象在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 O ...

  9. 使用sql server 链接服务器

    在我们的日常应用场景中经常会碰访问不同服务器上的数据库,即跨服务器访问操作不同的服务器上的SQL Sever数据库, 这个时候Sql Server的链接服务器就非常实用,创建SQL语句如下: --重新 ...

随机推荐

  1. 实现loading动画效果

    下面我就来罗列三种实现loading动画效果的方法. 方法一:使用UIImageView自带的方法来实现,这也是我推荐的实现方法. NSMutableArray *array = [[NSMutabl ...

  2. LeetCode Power of Three

    原题链接在这里:https://leetcode.com/problems/power-of-three/ 与Power of Two类似.检查能否被3整除,然后整除,再重复检查结果. Time Co ...

  3. Eclipse Memory Analyzer,内存泄漏插件,安装使用一条龙

    网上文档很多,但最初都有问题.整理一份,作为备份.使用过程:开发代码写完后,对可能出现内存溢出的代码,添加配置文件,生成.hprof文件,用memory Analyzer分析排查问题,且泄漏内存大小可 ...

  4. CentOS修改mysql 用户root的密码并允许远程登录

    第一步:用帐号登录mysql[root@CentOs5 ~]# mysql -u root -p 第二步:改变用户数据库mysql> use mysql 第三步:修改密码,记得密码要用passw ...

  5. Fiddler- -Composer创建和发送HTTP Request

    Fiddler的功能还有很多, 很多功能都没有被挖掘出来.这次我们介绍Fiddler中的一个非常有用的功能Composer,是用来创建和发送HTTP Request的.Composer的使用方法很简单 ...

  6. js 除法 取整

    js 除法 取整 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math.roun ...

  7. VS2015/2013/2012 IIS Express Debug Classic ASP

    参考资料: https://msdn.microsoft.com/en-us/library/ms241740(v=vs.100).aspx When you attach to an ASP Web ...

  8. cocos2dx 3.x(动态改变精灵的背景图片)

    //更换精灵CCSprite的图片有两种方式. //直接通过图片更换 //使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片. // auto bg = Sprit ...

  9. 【转】Ubuntu下查看软件版本及安装位置

    查看软件版本:aptitude show xxx 也可用apt-show-versions (要先安装sudo apt-get install apt-show-versions) 查看软件安装位置: ...

  10. XSS (Cross Site Scripting) Prevention Cheat Sheet(XSS防护检查单)

    本文是 XSS防御检查单的翻译版本 https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sh ...