news 2026/7/7 7:18:21

Python HTTP 服务(推荐,支持大文件)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python HTTP 服务(推荐,支持大文件)

跨服务器传文件,一台起 HTTP 服务提供下载(Server),另一台作为客户端拉取(Client)。

适用场景:大文件传输

Server 端(被下载方)

# server_a.py
from fastapi import FastAPI, HTTPException
from fastapi.responses import FileResponse
import os
app = FastAPI()
# 文件存放目录(可通过 docker -v 挂载,或直接设为 /path/to/your/files)
FILE_DIR = "/app/data"
@app.get("/download/{filename}")
def download_file(filename: str):
file_path = os.path.join(FILE_DIR, filename)
# 安全检查:防止路径穿越攻击(如 ../../etc/passwd)
if not os.path.abspath(file_path).startswith(os.path.abspath(FILE_DIR)):
raise HTTPException(status_code=400, detail="Invalid filename")
if not os.path.exists(file_path) or not os.path.isfile(file_path):
raise HTTPException(status_code=404, detail="File not found")
return FileResponse(file_path, filename=filename, media_type='application/octet-stream')
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7011)
# 启动 Server(需安装 fastapi, uvicorn)
python3 server_a.py

Client 端(下载方)

# client_b.py
import requests
import os
# 替换为 Server 的 IP 和端口
SERVER_A_IP = '132.0.0.1'
PORT = "7011"
FILENAME = "要下载的文件名"
url = f"http://{SERVER_A_IP}:{PORT}/download/{FILENAME}"
save_path = f"./{FILENAME}"
print(f"开始从 {url} 下载文件...")
try:
with requests.get(url, stream=True, timeout=3600) as response:
response.raise_for_status()
total_size = int(response.headers.get('content-length', 0))
downloaded_size = 0
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
if chunk:
f.write(chunk)
downloaded_size += len(chunk)
if total_size > 0:
percent = (downloaded_size / total_size) * 100
print(f"\r下载进度: {percent:.2f}%", end="")
print(f"\n下载完成!文件已保存至: {os.path.abspath(save_path)}")
except requests.exceptions.RequestException as e:
print(f"下载失败: {e}")
# 启动 Client(需安装 requests)
python3 client_b.py

注意事项

  • Server 和 Client 之间网络需互通(同一内网或公网可达)
  • 用 Docker 跑 Server可通过-p 7011:7011,将容器端口绑定到物理机端口,外部可通过物理机IP:端口访问容器服务,文件目录用-v挂载即可

方案二:scp(简单快捷,适合小文件)

双方必须都有 SSH 访问权限。

# 从本地推送到远程
scp /path/to/local/file user@remote_ip:/path/to/remote/
# 从远程拉取到本地
scp user@remote_ip:/path/to/remote/file /path/to/local/
# 递归传输目录
scp -r /path/to/local/dir user@remote_ip:/path/to/remote/
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 7:14:57

Python音频音轨分离调整

html<!DOCTYPE html><html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>音频音轨分离与时间偏移工具</title><…

作者头像 李华
网站建设 2026/7/7 7:06:48

如何高效使用 Website-downloader 完整保存网站资源

如何高效使用 Website-downloader 完整保存网站资源 【免费下载链接】Website-downloader &#x1f4a1; Download the complete source code of any website (including all assets). [ Javascripts, Stylesheets, Images ] using Node.js 项目地址: https://gitcode.com/g…

作者头像 李华
网站建设 2026/7/7 7:06:03

基于身份的密钥共享签名与模群密码漏洞分析

1. 项目概述最近在分析一些前沿的密码学方案时&#xff0c;我注意到一个非常有意思且颇具挑战性的研究方向&#xff1a;基于身份的密钥共享基础设施数字签名方案与模群公钥密码系统的漏洞分析。这个标题听起来很学术&#xff0c;但它背后直指现代密码学应用中的几个核心痛点——…

作者头像 李华
网站建设 2026/7/7 7:05:41

sqlmap-gui:图形化界面赋能SQL注入测试,效率提升10倍

1. 项目概述&#xff1a;告别命令行恐惧&#xff0c;拥抱高效渗透测试如果你是一名网络安全从业者、渗透测试工程师&#xff0c;或者是一名正在学习Web安全的学生&#xff0c;那么“SQL注入”这个词对你来说一定不陌生。作为OWASP Top 10榜单的常客&#xff0c;SQL注入漏洞的检…

作者头像 李华