python实现简易的FTP服务器
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# 实例化虚拟用户,这是FTP验证首要条件
authorizer = DummyAuthorizer()
path = r'D:\下载'
# 添加用户权限和路径,括号内的参数是(用户名, 密码, 用户目录, 权限)
authorizer.add_user('user', '12345', path, perm='elradfmw')
# 添加匿名用户 只需要路径
authorizer.add_anonymous(path)
# 初始化ftp句柄
handler = FTPHandler
handler.encoding = 'gbk'
handler.authorizer = authorizer
# 监听ip 和 端口,因为linux里非root用户无法使用21端口,所以我使用了2121端口
server = FTPServer(('127.0.0.1', 2121), handler)
# 开始服务
server.serve_forever()
通常,由于编码格式的问题,客户端访问时会出现中文乱码问题
解决
一、filesystem.py
在类 AbstractedFS 中:
增加属性:encoding
@property
def encoding(self):
return self.__encoding
@encoding.setter
def encoding(self,value):
self.__encoding=value
#复制代码
#修改__init__:
def __init__(self, root, cmd_channel,encoding):
#...
#...
self.__encoding=encoding
#并且将本文件中所有'utf8'替换为:self.encoding
二、修改handler
在类 FTPHandler 中:
同样增加属性encoding
复制代码
@property
def encoding(self):
return self.__encodingg
@encoding.setter
def encoding(self,value):
self.__encoding=value
self.fs.encoding=value
#复制代码
#在__init__中增加:
self.__encoding='utf8'
#在方法中 def handle_auth_success(。。。)修改一下(因为改了AbstractFS构造函数):
self.fs = self.abstracted_fs(home, self,self.encoding)
转载(https://www.cnblogs.com/xhzxlqt/p/13658481.html)
不想修改也可直接下载替换
filesystem.py
handlers.py