#진짜 FAST, #GO, Node.js 만큼 FAST
한 1년전부터 Flask에서 FastAPI로 바꿔서 백엔드 Rest API를 만들어 사용했다.
FastAPI를 통해서 FileUpload 기능을 사용해보려고 한다.
간단한 파일을 올려서 업무에 필요한 기능을 구현하는 목적이 있다.
main.py
from fastapi import FastAPI, File, UploadFile
from fastapi.staticfiles import StaticFiles
from utils import Utils
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
@app.post("/uploadfile/", tags=["files"])
async def create_upload_file(files: List[UploadFile] = File(...)):
files_upload = []
utils_upload = Utils()
for file in files:
res = await utils_upload.chunked_copy(file)
files_upload.append(res)
return {"results": files_upload}
utils.py
import os
from pprint import pprint as pp
from fastapi import File
class Utils:
def __init__(self):
self.RANDOM_COUNT = 0
self.DESTINATION = "static/img/"
async def chunked_copy(self, file: File):
file_exitst_chk = os.path.join(self.DESTINATION, file.filename)
while os.path.isfile(file_exitst_chk):
fname, fextension = os.path.splitext(file.filename)
pp(os.path.splitext(file.filename))
file_exitst_chk = os.path.join(self.DESTINATION, f"{fname}_{self.RANDOM_COUNT}{fextension}")
self.RANDOM_COUNT += 1
with open(file_exitst_chk, 'wb') as fw:
contents = await file.read()
fw.write(contents)
self.RANDOM_COUNT = 0
return file_exitst_chk
터미널에서
sik@Sikui-MacBookAir tutorial % uvicorn main:app --host 0.0.0.0 --port 8080 --reload
실행해주고,
Swagger 에서 확인을 해보면 파일을 올릴 수 있는 Form이 보이는데,
이렇게 파일 3개를 올리고 Execute 를 눌러주면,
이렇게 Response를 받아 볼 수 있다.
실제로 static folder 에서 위 파일을 확인해 볼 수 있다.
음.. 이제 저 파일을 어떻게 다운로드 받을 수 있을까?