Storage & File Uploads¶
Handle file uploads with built-in local storage or custom backends.
Overview¶
FastAPI Admin Kit includes a storage abstraction for file uploads. The default LocalStorageBackend saves files to a local directory.
Setup¶
Configure Storage¶
from fastapi_admin_kit.storage import LocalStorageBackend
admin = Admin(
app=app,
engine=engine,
secret_key="...",
storage=LocalStorageBackend(path="/uploads"),
uploads_url="/uploads",
)
Add Static Files Route¶
Serve uploaded files via FastAPI's StaticFiles:
from fastapi.staticfiles import StaticFiles
app.mount("/uploads", StaticFiles(directory="/uploads"), name="uploads")
Upload Widgets¶
FileUploadWidget¶
Generic file upload with size limits and type filtering:
from fastapi_admin_kit.widgets import FileUploadWidget
@admin.register(Document)
class DocumentAdmin(ModelAdmin):
form_widgets = {
"file": FileUploadWidget(
max_size_mb=10,
accept=".pdf,.doc,.docx",
),
}
| Option | Type | Default | Description |
|---|---|---|---|
max_size_mb |
int |
10 |
Maximum file size in MB |
accept |
str |
"" |
Comma-separated file extensions |
ImageUploadWidget¶
Image-specific upload with preview:
from fastapi_admin_kit.widgets import ImageUploadWidget
@admin.register(Product)
class ProductAdmin(ModelAdmin):
form_widgets = {
"image_url": ImageUploadWidget(
max_size_mb=5,
accept="image/*",
),
}
Storage Backend Protocol¶
Implement custom backends (S3, GCS, etc.) by extending StorageBackend:
from fastapi_admin_kit.storage.base import StorageBackend
class S3StorageBackend(StorageBackend):
def __init__(self, bucket, region, access_key, secret_key):
self.bucket = bucket
# ... setup S3 client
async def save(self, file, filename, content_type):
# Upload to S3
...
async def delete(self, path):
# Delete from S3
...
def get_url(self, path):
# Return public URL
return f"https://{self.bucket}.s3.amazonaws.com/{path}"
Backend Methods¶
| Method | Signature | Description |
|---|---|---|
save |
async save(file, filename, content_type) -> str |
Save file, return path |
delete |
async delete(path) -> None |
Delete file |
get_url |
get_url(path) -> str |
Get public URL for file |
Next Steps¶
- Widgets & Forms — More widget options
- Configuration — Storage config options