python fastapi 在页面以列表显示一个文件夹的文件清单,文件名可以编辑
时间: 2024-09-29 09:08:58 浏览: 7
在Python中使用FastAPI展示文件夹里的文件清单,你可以结合`fastapi`, `starlette`, `uvicorn`以及`pathlib`等库来实现。首先,你需要安装这些依赖,然后编写一个视图函数来处理目录遍历和文件操作。
```python
from fastapi import FastAPI, File, UploadFile, Form
from starlette.requests import Request
import os
import pathlib
app = FastAPI()
@app.get("/files/{folder_path:path}")
async def list_files(request: Request, folder_path: str):
# 检查路径是否合法
if not os.path.exists(folder_path) or not os.path.isdir(folder_path):
return {"error": "Path does not exist or is not a directory"}
files = []
for filename in sorted(os.listdir(folder_path)):
file_path = os.path.join(folder_path, filename)
file_info = {"name": filename, "editable": False} # 默认不可编辑
if request.method == "GET":
file_info["editable"] = False # 文件上传后才显示编辑选项
else:
# 如果请求有POST或PUT,则假设用户想要编辑文件
# 实现这部分需要一个文件上传处理逻辑,这里暂略
pass
files.append(file_info)
return {"files": files}
# 要让文件名支持编辑,可以在HTML模板里加上表单
@app.post("/edit_file/{filename:path}")
async def edit_file(filename: str, file_data: bytes = File(...)):
# 保存修改后的文件
with open(f"{folder_path}/{filename}", "wb") as f:
f.write(file_data)
return {"message": f"Edited {filename}"}
```
这个例子中,`list_files`视图用于列出目录下的文件,而`edit_file`视图则是在文件已存在的情况下允许编辑。请注意,实际的文件编辑部分(如POST请求处理和文件保存)在这里仅作示意,因为FastAPI本身并不直接处理文件内容的修改,这通常涉及到更复杂的文件系统操作,例如使用`shutil`、`pickle`或数据库存储。