Python写一个FTP协议服务器上传文件的代码案例
时间: 2024-09-19 16:04:12 浏览: 51
在Python中,你可以使用内置的`ftplib`模块来编写一个简单的FTP服务器,用于上传文件。以下是一个基本的示例,展示如何创建一个支持单用户上传的FTP服务器:
```python
import ftplib
from os import getcwd
# 定义一个FTP服务器函数
def simple_ftp_server():
# 创建一个FTP服务器实例
ftp = ftplib.FTP()
# 设置服务器地址和端口
host = 'localhost'
port = 2121 # 自定义端口号,通常21是默认FTP端口
# 开始监听并建立连接
try:
ftp.bind((host, port))
ftp.listen(5)
print(f"FTP server started on {host}:{port}")
conn, addr = ftp.accept() # 等待客户端连接
print(f"Connected by: {addr}")
with conn:
# 设置工作目录
ftp.cwd(getcwd())
# 允许数据传输
ftp.set_pasv(True)
# 欢迎消息
ftp.sendcmd("220 Welcome to my FTP Server")
# 接收上传文件名
filename = conn.recv(1024).decode('utf-8')
# 打开文件准备接收
with open(filename, 'wb') as file:
print(f"Receiving file {filename}...")
data = conn.makefile('rb', -1) # 使用阻塞模式读取
while True:
chunk = data.read(1024)
if not chunk:
break
file.write(chunk)
file.flush()
print("File received successfully.")
ftp.sendcmd("226 File transferred OK")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
simple_ftp_server()
```
在这个例子中,你需要在服务器运行前,先确保有权限在当前工作目录下创建和写入文件。当你运行这个服务器并打开FTP客户端(如FileZilla),就可以通过`put`命令上传文件。
阅读全文