fastapi html 页面下载链接,点击下载服务器指定一个有文件夹压缩而成的文件
时间: 2024-09-18 15:15:29 浏览: 59
FastAPI是一个轻量级、异步的Web框架,它非常适合构建RESTful API。如果你想要提供HTML页面让用户下载通过服务器打包的文件夹,可以结合一些前端技术和FastAPI的响应头来实现。这里是一个简单的步骤:
1. **创建文件夹并打包**:
首先,你需要将需要压缩的文件夹保存到服务器的一个特定目录下,并使用Python的`zipfile`库或其他工具(如`shutil`)生成一个压缩文件。
```python
from zipfile import ZipFile
import shutil
# 假设你的文件夹路径为 'source_folder'
with ZipFile('archive.zip', 'w') as zipf:
zipf.write('source_folder', arcname='archive')
```
2. **设置FastAPI路由**:
在FastAPI应用中,你可以创建一个HTTP GET请求,返回一个指向压缩文件的URL。这通常通过设置`Content-Disposition`响应头来触发浏览器下载。
```python
from fastapi import FastAPI, File, HTTPException
from starlette.responses import Response
app = FastAPI()
@app.get("/download")
async def download_file():
try:
# 获取压缩文件路径
file_path = "archive.zip"
# 设置正确的Content-Type和Content-Disposition
headers = {
"Content-Type": "application/zip",
"Content-Disposition": f"attachment; filename=archive.zip", # 下载名称
}
# 返回文件内容
return Response(
content=open(file_path, "rb").read(),
headers=headers,
media_type="application/octet-stream",
)
except FileNotFoundError:
raise HTTPException(status_code=404, detail="File not found.")
```
在这个例子中,当你访问`/download` URL时,浏览器会提示用户下载名为“archive.zip”的文件。
阅读全文