fastapi, 在一个网页模版上显示一个指定文件夹下所有不含地址的文件名的列表,并可以通过勾选的文件然后点击上传和下载按钮来删除和下载文件多个文件
时间: 2024-09-06 13:02:30 浏览: 110
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。它基于 Python 标准库中的类型提示,使代码既简洁又易于维护。以下是如何使用 FastAPI 在网页模板上显示一个指定文件夹下所有不含路径的文件名列表,并提供上传、下载和删除文件的功能的概述。
首先,你需要创建一个 FastAPI 应用,并安装一些必要的库,例如 `uvicorn` 用于运行你的服务,以及 `pydantic` 和 `jinja2` 分别用于数据验证和模板渲染。
1. 安装依赖项:
```bash
pip install fastapi uvicorn pydantic jinja2
```
2. 创建 FastAPI 应用和相关逻辑:
```python
# main.py
from fastapi import FastAPI, HTTPException, Request
from fastapi.templating import Jinja2Templates
from fastapi.responses import FileResponse
import os
from typing import List
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/")
async def list_files(request: Request):
folder_path = 'your_directory_path' # 指定的文件夹路径
file_names = [f for f in os.listdir(folder_path) if not os.path.isdir(os.path.join(folder_path, f))]
return templates.TemplateResponse("files_list.html", {"request": request, "files": file_names})
@app.post("/upload")
async def upload_file(file=File(...)):
# 这里实现文件上传逻辑
pass
@app.get("/download/{file_name}")
async def download_file(file_name: str):
file_path = os.path.join('your_directory_path', file_name)
if os.path.exists(file_path):
return FileResponse(path=file_path, media_type='application/octet-stream', filename=file_name)
else:
raise HTTPException(status_code=404, detail="File not found")
@app.delete("/delete/{file_name}")
async def delete_file(file_name: str):
file_path = os.path.join('your_directory_path', file_name)
if os.path.exists(file_path):
os.remove(file_path)
return {"message": "File deleted successfully"}
else:
raise HTTPException(status_code=404, detail="File not found")
```
3. 创建一个 HTML 模板文件 `files_list.html`:
```html
<!-- templates/files_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Files List</title>
</head>
<body>
<h1>Files</h1>
<ul>
{% for file in files %}
<li>
{{ file }}
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" value="{{ file }}" hidden>
<button type="submit">Upload</button>
</form>
<form action="/delete/{{ file }}" method="delete">
<button type="submit">Delete</button>
</form>
<a href="/download/{{ file }}">Download</a>
</li>
{% endfor %}
</ul>
</body>
</html>
```
这个示例提供了一个基本的 API 结构,你需要根据实际情况调整代码以满足你的需求,例如设置正确的文件夹路径、添加安全措施等。另外,你可能需要根据具体的前端框架来调整 HTML 模板中的表单处理方式。
阅读全文