In this example we will see how to upload images and use background tasks to generate resolutions for different
devices
Dependencies
pip3 install fastapi uvicorn Pillow
Background Tasks
You can define background tasks to be run after returning a response.
from fastapi import FastAPI, UploadFile, File, BackgroundTasks
from fastapi.responses import JSONResponse
from os import getcwd
from PIL import Image
app = FastAPI()
PATH_FILES = getcwd() + "/"
# RESIZE IMAGES FOR DIFFERENT DEVICES
def resize_image(filename: str):
sizes = [{
"width": 1280,
"height": 720
}, {
"width": 640,
"height": 480
}]
for size in sizes:
size_defined = size['width'], size['height']
image = Image.open(PATH_FILES + filename, mode="r")
image.thumbnail(size_defined)
image.save(PATH_FILES + str(size['height']) + "_" + filename)
print("success")
@app.post("/upload/file")
async def upload_file(background_tasks: BackgroundTasks, file: UploadFile = File(...)):
# SAVE FILE ORIGINAL
with open(PATH_FILES + file.filename, "wb") as myfile:
content = await file.read()
myfile.write(content)
myfile.close()
# RESIZE IMAGES
background_tasks.add_task(resize_image, filename=file.filename)
return JSONResponse(content={"message": "success"})
Output
dogs.jpg # Original Image
720_dogs.jpg # Resolution 1280 x 720
480_dogs.jpg # Resolution 640 x 480
Example in GitHub Gist
https://gist.github.com/nelsoncode019/35910eff9c09ca015cfb4748be345133
Top comments (0)