Python搭建FTP服务器的方法示例


Posted in Python onJanuary 19, 2018

Python版本 3.6.2

使用的ftp包:pyftpdlib    pip install pyftpdlib就可以下载安装了

FTP协议下载上传文件在文件过大的情况下会比HTTP更具有优势,更为方便的实现断点上传和进度监控,下面是官方文档中的

基本方法

import os 
from pyftpdlib.authorizers import DummyAuthorizer 
from pyftpdlib.handlers import FTPHandler 
from pyftpdlib.servers import FTPServer 
 
def main(): 
  # 实例化用户授权管理 
  authorizer = DummyAuthorizer() 
  authorizer.add_user('user', '12345', 'path', perm='elradfmwMT')#添加用户 参数:username,password,允许的路径,权限 
  authorizer.add_anonymous(os.getcwd())#这里是允许匿名用户,如果不允许删掉此行即可 
 
  # 实例化FTPHandler 
  handler = FTPHandler 
  handler.authorizer = authorizer 
 
  # 设定一个客户端链接时的标语 
  handler.banner = "pyftpdlib based ftpd ready." 
 
  #handler.masquerade_address = '151.25.42.11'#指定伪装ip地址 
  #handler.passive_ports = range(60000, 65535)#指定允许的端口范围 
 
  address = (ipaddr, 21)#FTP一般使用21,20端口 
  server = FTPServer(address, handler)#FTP服务器实例 
 
  # set a limit for connections 
  server.max_cons = 256 
  server.max_cons_per_ip = 5 
 
  # 开启服务器 
  server.serve_forever() 
 
if __name__ == '__main__': 
  main()

开启ftp服务器后要确定防火墙开启了21,20端口,并且在客户端的浏览器中设置internet选项高级选项卡中的被动ftp的勾去掉之后才能登陆到ftp服务器

从Windows登录到服务器:

Python搭建FTP服务器的方法示例

利用Python从ftp服务器上下载文件

from ftplib import FTP 
ftp=FTP() 
ftp.connect('localhost',21)#localhost改成服务器ip地址 
ftp.login(user='user',passwd='12345') 
 
file=open('f://ftpdownload/test.txt','wb') 
ftp.retrbinary("RETR test.txt",file.write,1024)#从服务器上下载文件 1024字节一个块 
ftp.set_debuglevel(0) 
ftp.close()

FTP服务器事件回调函数:

class MyHandler(FTPHandler):  
  def on_connect(self):#链接时调用 
    print "%s:%s connected" % (self.remote_ip, self.remote_port) 
 
  def on_disconnect(self):#关闭连接是调用 
    # do something when client disconnects 
    pass 
 
  def on_login(self, username):#登录时调用 
    # do something when user login 
    pass 
 
  def on_logout(self, username):#登出时调用 
    # do something when user logs out 
    pass 
 
  def on_file_sent(self, file):#文件下载后调用 
    # do something when a file has been sent 
    pass 
 
  def on_file_received(self, file):#文件上传后调用 
    # do something when a file has been received 
    pass 
 
  def on_incomplete_file_sent(self, file):#下载文件时调用 
    # do something when a file is partially sent 
    pass 
 
  def on_incomplete_file_received(self, file):#上传文件时调用 
    # remove partially uploaded files 
    import os 
    os.remove(file)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python网络编程实例简析
Sep 26 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 Python
python数组复制拷贝的实现方法
Jun 09 Python
vscode 远程调试python的方法
Dec 01 Python
代码讲解Python对Windows服务进行监控
Feb 11 Python
Redis使用watch完成秒杀抢购功能的代码
May 07 Python
python日期时间转为字符串或者格式化输出的实例
May 29 Python
python制作填词游戏步骤详解
May 05 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
pycharm修改文件的默认打开方式的步骤
Jul 29 Python
Django权限设置及验证方式
May 13 Python
在Python 中将类对象序列化为JSON
Apr 06 Python
python re模块findall()函数实例解析
Jan 19 #Python
Python enumerate索引迭代代码解析
Jan 19 #Python
5个很好的Python面试题问题答案及分析
Jan 19 #Python
Python3实现的画图及加载图片动画效果示例
Jan 19 #Python
Python实现将doc转化pdf格式文档的方法
Jan 19 #Python
python机器学习理论与实战(四)逻辑回归
Jan 19 #Python
python机器学习理论与实战(二)决策树
Jan 19 #Python
You might like
通过文字传递创建的图形按钮
2006/10/09 PHP
网页常用特效代码整理
2006/06/23 Javascript
javascript编程起步(第七课)
2007/02/27 Javascript
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
Javascript变量作用域详解
2013/12/06 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
Vue.js 2.5新特性介绍(推荐)
2017/10/24 Javascript
详解React中setState回调函数
2018/06/14 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
[50:50]完美世界DOTA2联赛PWL S3 Galaxy Racer vs Phoenix 第一场 12.10
2020/12/13 DOTA
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
String是最基本的数据类型吗?
2013/06/13 面试题
面料业务员岗位职责
2013/12/26 职场文书
党的群众路线教育实践活动公开承诺书
2014/03/28 职场文书
2015年仓库工作总结
2015/04/09 职场文书
党员进社区活动总结
2015/05/07 职场文书
鲁冰花观后感
2015/06/10 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python实现单例模式的5种方法
2021/06/15 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript