• Python使用pyftpdlib组件实现FTP文件共享
  • 发布于 2个月前
  • 360 热度
    0 评论
前言

早些年前,大家做网站使用的大多都是虚拟主机,每个用户都会分配一个FTP账号。我上一个公司,做项目,为了快速上传大文件,给每个用户分配了一个目录,使用FTP工具自行上传文件。还有我的新东家使用的是 windows server 服务器,蓝瘦的一批,被限制了,还不能拷贝。于是我想搭建一个 Web 文件服务器,提供预览下载功能。


WEB文件共享
Python3 一行代码就可以搞定文件的局域网共享,切换到文件共享目录,执行以下代码:
python -m http.server port
浏览器输入 http://ip:port 就可以访问共享文件,预览太丑,这里就不放了。

一行代码,我们就可以搭建局域网文件共享的 Web 服务,但是这个服务只能提供下载服务,无法上传,并且无法进行权限控制。那么问题来了,如何解决呢?各位看官继续向下看。

FTP文件共享
Python 第三方组件就是个大宝库,基本所有的问题都能找到解决文案,只需要安装第三方组件即可:
pip install pyftpdlib
简单命令
python -m pyftpdlib -i 127.0.0.1 -w -d F:\\file -u user -P 123456
说明:
-i 指定IP地址(默认为本机所有可用 IP 地址)
-p 指定端口(默认为 2121)
-w 写权限(默认为只读)
-d 指定目录 (默认为当前目录)
-u 指定登录用户名
-P 指定登录密码
也可以通过以下命令了解更多帮助信息:
python -m pyftpdlib --help
高级使用
简单的一行命令,有时候并不能满足我们的业务需求,比如根据不同的用户,创建FTP账号,对应不同的目录以及操作权限。
# -*- coding: utf-8 -*-

from pyftpdlib.handlers import FTPHandler

from pyftpdlib.servers import FTPServer

from pyftpdlib.authorizers import DummyAuthorizer



if __name__ == '__main__':
    authorizer = DummyAuthorizer()
    '''
        权限说明:
        Read permissions:
         - "e" = change directory (CWD command)
         - "l" = list files (LIST, NLST, STAT, MLSD, MLST, SIZE, MDTM commands)
         - "r" = retrieve file from the server (RETR command)

        Write permissions:
         - "a" = append data to an existing file (APPE command)
         - "d" = delete file or directory (DELE, RMD commands)
         - "f" = rename file or directory (RNFR, RNTO commands)
         - "m" = create directory (MKD command)
         - "w" = store a file to the server (STOR, STOU commands)
         - "M" = change file mode (SITE CHMOD command)
         - "T" = update file last modified time (MFMT command)
    '''
    '''
     这里我们创建一个管理员,拥有所有权限,创建一个普通用户,只拥有浏览权限
    '''
    authorizer.add_user('admin', 'admin', 'F:\\file', perm='elradfmwM')
    authorizer.add_user('user', 'user', 'F:\\file')
    handler = FTPHandler
    handler.authorizer = authorizer
    server = FTPServer(('0.0.0.0', 8888), handler)
    server.serve_forever()
启动服务,访问 ftp://ip:port 输入账号密码,就可以访问共享文件了,也可以使用 WinSCP进行远程访问:

预览太丑,这里不放了,大家自行操作。

小结
人生苦短,我学Python!总的来说,Python 的第三方组件还是很强大的,建议喜欢折腾的程序员,都尝试学习一下这门语言,你会有意想不到的收获!
用户评论