一、前言
日常开发、本地文件共享、临时传输场景中,我们需要快速搭建一个轻量HTTP服务,无需部署Nginx、Tomcat等重型服务。Python 提供了零依赖、开箱即用 的HTTP服务能力,既可以使用内置模块快速启动静态文件下载服务,也可以自定义代码实现浏览器可视化上传、下载、预览功能。
以下对比使用两种搭建方案:
-
方案一:一行命令启动静态下载服务(极简、适合临时文件共享)
-
方案二:自定义Python服务,支持浏览器上传+下载+文件列表预览(全能实用)
所有代码基于Python3.x,无需安装第三方库,原生内置,跨Windows/Linux/Mac系统通用。
二、方案一:一行命令启动极简文件下载服务
2.1 功能说明
使用Python内置http.server模块,快速将本地文件夹转为Web目录,浏览器可直接访问、预览、下载目录下所有文件,仅支持下载,不支持上传,适合临时文件共享。
2.2 启动命令
打开终端,进入需要共享的文件目录,执行对应命令:
Python3 通用命令
bash
# 默认端口8000,监听所有网卡
python -m http.server 8000
# 自定义端口(例如9000)
python -m http.server 9000
2.3 访问方式
-
本地访问:
http://127.0.0.1:8000 -
局域网访问:
http://本机IP:8000(手机/其他电脑可访问)
2.4 优缺点
✅ 优点:零配置、一秒启动、无依赖、跨平台
❌ 缺点:仅支持文件下载/预览,不支持文件上传,无权限控制,仅适合临时使用
三、方案二:自定义HTTP服务
基于Python内置http.server、cgi模块二次封装,实现完整功能:浏览器在线查看文件列表、点击下载文件、选择文件上传保存到本地,无需任何第三方依赖。
3.1 服务代码
新建文件 http_file_server.py,复制以下全部代码:
python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python 简易HTTP文件服务
功能:浏览器预览文件列表、文件下载、文件上传
无第三方依赖,Python3原生支持
"""
import os
import cgi
from http.server import BaseHTTPRequestHandler, HTTPServer
# 配置服务端口和文件存储根目录
SERVER_PORT = 8000
# 服务运行目录作为文件根目录
ROOT_DIR = os.getcwd()
class FileServerHandler(BaseHTTPRequestHandler):
# 忽略日志输出,保持终端干净
def log_message(self, format, *args):
return
# 渲染HTML页面模板
def render_html(self, title, content):
html = f"""
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{title}</title>
<style>
body {{font-family:微软雅黑; margin:20px;}}
.box {{border:1px solid #eee; padding:20px; border-radius:8px; margin-bottom:20px;}}
a {{color:#0066cc; text-decoration:none;}}
a:hover {{text-decoration:underline;}}
.file-item {{line-height:2;}}
</style>
</head>
<body>
<h2>{title}</h2>
{content}
</body>
</html>
"""
self.send_response(200)
self.send_header("Content-type", "text/html; charset=utf-8")
self.end_headers()
self.wfile.write(html.encode("utf-8"))
# 展示文件列表 & 上传表单页面
def do_GET(self):
# 拼接页面内容
upload_form = """
<div class="box">
<h3>文件上传</h3>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upload_file" />
<button type="submit" style="padding:4px 12px; margin-left:10px;">上传文件</button>
</form>
</div>
"""
# 遍历当前目录文件
file_list = "<div class='box'><h3>文件列表(点击下载)</h3>"
for file in os.listdir(ROOT_DIR):
# 忽略py源码文件(可选,可删除)
if file.endswith(".py"):
continue
file_path = os.path.join(ROOT_DIR, file)
file_list += f'<div class="file-item"><a href="{file}" target="_blank">{file}</a></div>'
file_list += "</div>"
# 渲染页面
self.render_html("Python文件上传下载服务", upload_form + file_list)
# 处理文件上传请求
def do_POST(self):
try:
# 解析上传文件
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={"REQUEST_METHOD": "POST"}
)
# 获取上传文件对象
upload_file = form["upload_file"]
file_name = upload_file.filename
# 空文件判断
if not file_name:
self.render_html("上传失败", "<p>未选择任何文件!</p><a href='/'>返回首页</a>")
return
# 写入保存文件
save_path = os.path.join(ROOT_DIR, file_name)
with open(save_path, "wb") as f:
f.write(upload_file.file.read())
# 上传成功页面
self.render_html("上传成功", f"<p>文件【{file_name}】上传成功!</p><a href='/'>返回首页</a>")
except Exception as e:
self.render_html("上传失败", f"<p>上传异常:{str(e)}</p><a href='/'>返回首页</a>")
if __name__ == "__main__":
server = HTTPServer(("0.0.0.0", SERVER_PORT), FileServerHandler)
print(f"✅ 文件服务启动成功")
print(f"🔗 本地访问:http://127.0.0.1:{SERVER_PORT}")
print(f"🔗 局域网访问:http://本机IP:{SERVER_PORT}")
print(f"📂 文件根目录:{ROOT_DIR}")
print("-" * 50)
try:
server.serve_forever()
except KeyboardInterrupt:
server.server_close()
print("❌ 服务已关闭")
3.2 启动服务
bash
# 直接运行脚本
python http_file_server.py
3.3 核心功能
-
文件预览/下载:浏览器打开页面,自动列出当前目录所有文件,点击文件名直接下载
-
文件上传:页面选择本地文件,点击上传,自动保存到服务运行目录
-
跨设备访问:支持局域网手机、其他电脑访问上传下载文件
-
中文兼容:完美支持中文文件名、中文文件内容
四、服务使用方法
4.1 本地访问
浏览器输入:http://127.0.0.1:8000
4.2 局域网跨设备访问
-
查看本机电脑IP(Windows:
ipconfig,Linux/Mac:ifconfig) -
同局域网设备(手机/其他电脑)访问:
http://电脑IP:8000 -
无需配置防火墙放行,默认本地局域网可通
4.3 操作方式
-
下载文件:页面文件列表点击对应文件,浏览器自动下载
-
上传文件:点击选择文件 → 选中本地文件 → 点击上传,自动保存到服务目录
五、常见问题与注意事项
5.1 端口占用问题
若8000端口被占用,修改代码中 SERVER_PORT 为其他端口(如8080、9000)即可。
5.2 文件保存位置
所有上传的文件会自动保存到脚本运行的目录 ,可修改 ROOT_DIR 变量自定义存储路径。
5.3 安全说明
该服务为临时工具服务 ,无账号密码、无权限校验、无加密传输,禁止部署在公网,仅用于本地、局域网临时文件传输。
5.4 兼容性
兼容所有Python3.x版本,支持Windows、Linux、Mac系统,无需pip安装任何依赖。
六、两种方案对比
| 方案 | 上传功能 | 下载功能 | 部署难度 | 适用场景 |
|---|---|---|---|---|
| 方案一 | 不支持 | 支持 | 极低(1秒启动) | 临时文件下载、静态资源共享 |
| 方案二 | 支持 | 支持 | 低(直接运行脚本) | 局域网双向文件传输、临时上传下载工具 |