环境
安装FastAPI
pip install fastapi
导入
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import StreamingResponse
from pathlib import Path
from starlette.responses import Response
实现
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import FileResponse
from pathlib import Path
from starlette.responses import Response
app = FastAPI()
UPLOAD_FOLDER = './uploads'
@app.post("/files/")
async def upload_file(file: UploadFile = File(...)):
# 读取文件内容
contents = await file.read()
filename = file.filename
# 保存文件夹,可自定义
uploads_dir = Path(UPLOAD_FOLDER)
if not uploads_dir.exists():
uploads_dir.mkdir(parents=True, exist_ok=True)
# 构造完整的文件路径
file_path = uploads_dir / file.filename
# 写入文件
with open(file_path, "wb+") as f:
f.write(contents)
return {"filename": filename, "message": f"File content type: {file.content_type}"}
@app.get("/download/{filename:path}")
async def download_file(filename: str):
# 假设文件就在UPLOAD_FOLDER下
file_path = Path(UPLOAD_FOLDER) / filename
if not file_path.exists():
return Response(status_code=404, content={"message": "File not found"})
# 使用FileResponse来发送文件
return FileResponse(path=file_path, filename=filename)