在现代网络应用中,文件上传和下载是非常常见的需求。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模块搭建一个简单的文件上传下载服务。以上代码实现了基本的功能,可以根据需要进行扩展,比如支持多文件上传、文件名动态处理,以及下载时的文件列表等。希望本文对你有帮助,能够顺利搭建出自己的文件服务!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部