Возможно ли загрузить файл на localhost в FastAPI?
В документации FastAPI есть пример:
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(file: bytes = File(...)):
return {"file_size": len(file)}
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
return {"filename": file.filename}
Хотелось бы загруженный файл сохранить на localhost и иметь к нему доступ по url. Возможно ли это и как это сделать? В сети есть примеры различных манипуляций с файлом через shutil, но этот модуль, как я понимаю, предназначен только для работы с локальными файлами.
Ответы (1 шт):
Автор решения: eri
→ Ссылка
FastAPI сохраняет файл на диск во временный каталог. После его нужно переместить в папку со статикой.
Через copyfileobj более универсально, но тут файл будет записан на диск 2 раза
# file: UploadFile
with open('путь/к/статике/' + filename, "wb") as wf:
shutil.copyfileobj(file.file, wf)
file.file.close() # удалаяет временный
Если временный каталог на том же диске что и хранилище файлов, то можно быстро продублировать через os.link
Для того чтоб файлы стали доступны для скачивания нужно добавить ссылку
app.mount('/uploads', StaticFiles(directory="путь/к/статике/"), name="uploads")