python的http.server建立的临时server,只能从客户侧下载文件,怎么下载目录呢?
局域网内想在不压缩文件的情况下,想从客户端的浏览器里下载一个大目录(目录下有多个文件及多级子目录,子目录下又有文件)1.网上的绿色软件基本都有毒,像飞鸽传书等。或者要被装1大堆软件
2.网络共享有时设置麻烦
用 python的http.server的话,很方便,但从客户端浏览器里只能下单文件?
1.有没有办法用 python 的http.server 把整个服务器共享出来的目录下下来? 一个一个拖文件不太可行。
2.有没有办法多线程? 在 Python 的 `http.server` 默认配置下,浏览器无法直接下载整个目录(含子目录结构)。以下是符合你需求的解决方案:
### 解决方案:打包目录为 ZIP 文件(不压缩)
虽然你要求不压缩,但浏览器无法直接下载文件夹结构。最接近的方式是**将目录打包为 ZIP 文件(使用存储模式不压缩)**,用户下载后解压即可得到原始文件结构。
#### 操作步骤:
1. 使用此自定义 Python 脚本启动服务器(保存为 `server.py`):
import http.server
import socketserver
import os
import zipfile
from io import BytesIO
PORT = 8000
class CustomHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == '/download':
# 打包当前目录(不压缩)
buffer = BytesIO()
with zipfile.ZipFile(buffer, 'w', zipfile.ZIP_STORED) as zipf:
for root, dirs, files in os.walk('.'):
for file in files:
path = os.path.join(root, file)
zipf.write(path, os.path.relpath(path))
self.send_response(200)
self.send_header('Content-Type', 'application/zip')
self.send_header('Content-Disposition', 'attachment; filename="folder.zip"')
self.end_headers()
buffer.seek(0)
self.wfile.write(buffer.getvalue())
else:
super().do_GET()
with socketserver.TCPServer(("", PORT), CustomHandler) as httpd:
print(f"服务器已启动,访问 http://localhost:{PORT}")
print("下载整个目录: http://localhost:8000/download")
httpd.serve_forever()
2. **启动服务器**(在要共享的目录中运行):
python server.py
3. 在浏览器访问:
- 浏览文件:`http://<服务器IP>:8000`
- **下载整个目录**:`http://<服务器IP>:8000/download`
---
### 关键说明:
1. **ZIP_STORED 模式**:文件仅打包不压缩,速度极快,解压后得到原始文件
2. **目录结构保留**:子目录和文件名保持不变
3. **无需额外软件**:浏览器直接下载 ZIP,系统自带解压功能
---
### 替代方案(命令行下载)
如果客户端能使用命令行工具:
# 在客户端执行(替换IP为服务器IP)
wget -r -nH --cut-dirs=1 http://<服务器IP>:8000/
参数说明:
- `-r`:递归下载
- `-nH`:不创建主机名前缀
- `--cut-dirs=1`:忽略服务器路径层级
---
### 多线程下载说明
Python 的 `http.server` 默认单线程,如需多线程支持:
# 替换 TCPServer 为 ThreadingHTTPServer
from http.server import ThreadingHTTPServer
httpd = ThreadingHTTPServer(("", PORT), CustomHandler)
这样可同时处理多个客户端请求(但单个文件下载仍受限于网络带宽)。
> 提示:大文件下载建议用专业工具(如 rsync),HTTP 协议本身不支持断点续传目录。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]