Our REST API, api.slingacademy.com, is built with FastAPI, and our static files are all located in a folder named public and its subdirectories (sample-photos is one of the subdirectories).
What is the point?
To serve static files in FastAPI, just call the built-in mount() method on your app instance. For example, you can use the following code to serve static assets in a directory named public:
# main.py from fastapi import FastAPI from fastapi.staticfiles import StaticFiles app = FastAPI() app.mount("/public", StaticFiles(directory="public"), name="static")
Any path that starts with /public will be used for serving static materials. Note that public is just a demonstration, and you can use whatever name you like.
The mount() method creates an independent sub-application in a specific path that then takes care of handling all the sub-paths. Note that the OpenAPI and docs from your main application won’t include anything from the sub-application.
Let me explain the code snippet above a bit deeper:
- /public: The sub-path of the sub-application that is mounted on
- public: The path to the directory where you want to store your static files
- static: This is optional. It provides a name for FastAPI’s internal use. static isn’t mandatory, and you can use another string as you wish.
If you have a ton of static files, you can keep your project organized by adding more subdirectories like this:
├── main.py ├── public │ ├── css │ ├── images │ └── js └── requirements.txt
You can also mount other directories to your application, like this:
from fastapi import FastAPI from fastapi.staticfiles import StaticFiles app = FastAPI() app.mount("/audios", StaticFiles(directory="audios"), name="audios") app.mount("/images", StaticFiles(directory="images"), name="images") app.mount("/docs", StaticFiles(directory="docs"), name="documents")