FTP简介:
现在阿里云oss云=对象存储、七牛云oss用的居多,及后台下发静态资源,减少应用后台的负载。
HTTP主要用于基于Web的文件下载以及访问Web服务。一般客户端无须登录就可以访问服务器上的文件和服务。大多HTTP文件传输请求都用于获取网页。
scp、rsync需要用户登录到服务器主机。传输之前需要验证客户端的身份。
FTP 与scp、rsync相同,也可以上传/下载文件,采用unix的用户概念,需要输入有效的用户名密码,也允许匿名登录。FTP主要用于匿名下载公共文件,也可用于2台计算机之间传输文件。
FTP有2种模式:主动、被动。
主动模式下服务器才使用数据端口。在服务器把20号端口设置为数据端口后,它主动连接客户端的数据端口。在被动模式下,服务器只是告诉客户端随机的数据端口号,客户端必须主动建立数据连接。在这种模式下,FTP服务器在建立数据连接时是被动的。
搭建FTP服务器:(阿里云)
对于windows和linux都是可以搭建FTP服务器进行文件的传输的。
这里介绍的是在阿里云服务器上搭建FTP。
由于方便,采用的是宝塔Linux面板:
进入到FTP服务器的目录,以上面的根目录显示为准,比如我这里的:/www/wwwroot/yinleiFTP
上传一些文件方便等会儿的测试。
Python编写FTP客户端程序:
流程:
- 连接到服务器
- 登录
- 发出服务请求(希望得到响应)
- 退出
使用python的ftp支持时,需要做的只是导入ftplib模块,并实例化一个ftplib.FTP类对象。所有的操作都使用这个对象完成
在一般FTP事务种,使用到的指令有login()、cwd()、dir()、pwd()、stor*()、retr*()、quit()
ftplib.FTP类的常用方法:
方法 | 描述 |
login(user='xxx',password='xxx',acct='') | 登录FTP服务器,所有参数都是可选的 |
pwd() | 获得当前工作目录 |
cwd(path) | 把当前工作目录设置为path所指示的路径 |
dir([path[,....[cb]]]) | 显示path目录里面的内容,可选参数cb是一个回调函数,会传递给retrlines()方法 |
nlst([path[,...]]) | 与dir类似,但返回一个文件名列表,而不是显示这些文件名 |
retrlines(cmd,[,cb]) | 给定ftp命令(如'RETR filename'),用于下载文本文件。可选回调函数cb用于处理文件的每一行 |
retrbinary(cmd,cb[,bs=8192[,ra]]) | 与retrlines类似,只是这个指令处理2进制文件。回调函数cb用于处理每一块(块大小默认为8kb)下载的数据 |
storlines(cmd,f) | 给定ftp命令,用来上传文本文件,要给定一个文件对象f |
storbinary(cmd,f[,bs=8192]) | 与strolines类似,只是这个指令才处理2进制文件。要给定一个文件对象f,上传块大小bs默认为8kb |
rename(old,new) | 把远程文件old重命名为new |
delete(path) | 删除位于path的远程文件 |
mkd(directory) | 创建远程目录 |
rmd(directory) | 删除远程目录 |
quit() | 关闭连接并退出 |
代码示例:
上面是简单的测试,连接上了阿里云的ftp。
下面编写例子,执行python脚本:
由于到饭点了,就不编写更多操作了。。。
关于阿里云和宝塔面板相关的配置问题(解决连接不上ftp):
解决步骤:
1.需要在安全组设置中,对22、21端口放行,并且被动端口(39000 - 40000)也需要处于放行状态
所谓的 "被动端口(39000 - 40000)也需要处于放行状态",即是指在阿里云安全组的添加端口范围为 39000/40000 的设置
配置完后:
配置后到宝塔安全里面就会看到:
2.宝塔Linux面板在使用sftp用最高权限连接时一切正常,但是使用在宝塔里面创建的ftp的账号密码,就无法登陆,
(1).进入宝塔Linux面板中的软件管理,找到Pure-Ftpd 1.0.47点设置
将后面的192.168.0.1 修改为你自己的阿里云服务器公网IP地址,同时,去掉ForcePassiveIP的“#”号。然后保存
测试:
用xftp6新建会话: