专栏首页python3Python搭建FTP服务器

Python搭建FTP服务器

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服务器上下载文件

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python 关于高级特性的问题

      15. filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    py3study
  • Python笔记

    import functools import operator mul2 = lambda x: 2 * x print(mul2(3)) pr...

    py3study
  • python3--面向对象的三大特性:封装,property,classmethod,staticmethod

    AttributeError: type object 'A' has no attribute '__N'

    py3study
  • python 操作 libreoffic

    最近研究了一个,用python来向libreoffice spreadsheet中的写数据,openoffice管方网站的资料也不是很清楚,

    py3study
  • Python练手例子(2)

    11、古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    py3study
  • Swift 可选链

    可选链是一个调用和查询可选属性、方法和下标的过程,它可能为 nil 。如果可选项包含值,属性、方法或者下标的调用成功;如果可选项是 nil ,属性、方法或者下标...

    赵哥窟
  • ajax实现步骤之XMLHttpRequest

    我们现在开发一直在使用ajax或者是axios与后台进行交互,这两个在浏览器工作的时候都是基于XMLHttpRequest,只不过是封装了便于使用。axios ...

    wade
  • 外观模式

    上面的例子中WalkingDrone类隐藏了Leg类的复杂同步操作,提供了一个更为简单的接口。

    用户2936342
  • 用python处理MS Word

    使用python工具读写MS Word文件(docx与doc文件),主要利用了python-docx包。本文给出一些常用的操作,并完成一个样例,帮助大家快速入手...

    py3study
  • 接口测试和单元测试

    了解cookie是先登录的时候会产生,然后在这个网站充值的时候直接就有cookie了。

    清菡

扫码关注云+社区

领取腾讯云代金券