在现代网络应用中,文件上传和下载是非常常见的需求。Python提供了一个简单而强大的库——http.server
,可以帮助我们快速搭建一个基本的文件上传和下载服务。以下是如何使用Python的http.server
模块搭建文件上传下载服务的详细步骤。
一、环境准备
首先,确保你的计算机上已经安装了Python。你可以通过在终端中输入以下命令来检查:
python --version
如果没有安装,请到Python的官方网站下载并安装。
二、搭建文件上传下载服务
接下来,我们将创建一个Python脚本,通过http.server
模块实现文件上传和下载的功能。
1. 创建Python脚本
首先,我们新建一个Python文件,比如file_server.py
:
# file_server.py
import os
import http.server
import socketserver
from urllib.parse import parse_qs
PORT = 8000
UPLOAD_DIR = 'uploads' # 上传文件的保存目录
# 确保上传目录存在
if not os.path.exists(UPLOAD_DIR):
os.makedirs(UPLOAD_DIR)
class MyHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
"""处理GET请求,下载文件"""
if self.path.startswith('/download/'):
file_name = self.path[len('/download/'):]
file_path = os.path.join(UPLOAD_DIR, file_name)
if os.path.isfile(file_path):
self.send_response(200)
self.send_header('Content-Type', 'application/octet-stream')
self.send_header('Content-Disposition', f'attachment; filename={file_name}')
self.end_headers()
with open(file_path, 'rb') as file:
self.wfile.write(file.read())
else:
self.send_error(404, "File not found")
else:
super().do_GET()
def do_POST(self):
"""处理POST请求,上传文件"""
if self.path == '/upload':
content_length = int(self.headers['Content-Length'])
post_data = self.rfile.read(content_length)
# 解析文件内容(假设这里进行简单的处理)
file_name = 'uploaded_file' # 可以根据实际需求动态命名
file_path = os.path.join(UPLOAD_DIR, file_name)
with open(file_path, 'wb') as f:
f.write(post_data)
self.send_response(200)
self.end_headers()
self.wfile.write(b'File uploaded successfully.')
else:
self.send_error(404, "Not found")
def log_message(self, format, *args):
return # 重写日志记录,不输出到控制台
# 启动服务
with socketserver.TCPServer(("", PORT), MyHTTPRequestHandler) as httpd:
print(f"Serving on port {PORT}")
httpd.serve_forever()
2. 使用脚本
在同一目录下,你可以创建一个简单的HTML表单,用于文件上传。创建一个名为index.html
的文件,内容如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" required>
<input type="submit" value="上传">
</form>
<h1>文件下载</h1>
<form action="/download" method="get">
<input type="text" name="file" placeholder="输入文件名" required>
<input type="submit" value="下载">
</form>
</body>
</html>
3. 运行服务
在终端中执行以下命令:
python file_server.py
访问 http://localhost:8000
就可以看到上传和下载的网页了。
三、总结
本文详细展示了如何通过Python的http.server
模块搭建一个简单的文件上传下载服务。以上代码实现了基本的功能,可以根据需要进行扩展,比如支持多文件上传、文件名动态处理,以及下载时的文件列表等。希望本文对你有帮助,能够顺利搭建出自己的文件服务!