Working with Files and Images
您可以使用 fastapi-storages 包来简化 SQLAdmin 中的文件管理。
目前,fastapi-storages 提供了两种存储后端:
FileSystemStorage:用于将文件存储在本地文件系统中。
S3Storage:用于将文件存储在 Amazon S3 或兼容的 S3 存储中。
它还包括了自定义的 SQLAlchemy 类型,方便与 SQLAdmin 集成:
FileType
ImageType
让我们来看一个最简示例:
示例
from fastapi import FastAPI
from sqladmin import Admin, ModelView
from sqlalchemy import Column, Integer, create_engine
from sqlalchemy.orm import declarative_base
from fastapi_storages import FileSystemStorage
from fastapi_storages.integrations.sqlalchemy import FileType
Base = declarative_base()
engine = create_engine("sqlite:///example.db")
app = FastAPI()
admin = Admin(app, engine)
storage = FileSystemStorage(path="/tmp")
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
file = Column(FileType(storage=storage))
class UserAdmin(ModelView, model=User):
column_list = [User.id, User.file]
Base.metadata.create_all(engine) # 创建表
admin.add_view(UserAdmin)首先,我们定义了一个 FileSystemStorage(path="/tmp"),并将其配置为使用本地的 /tmp 目录来上传文件。然后,我们在模型中定义了一个名为 file 的自定义字段,使用 FileType 和我们的存储配置。
现在,访问 /admin/user 来创建一个新的用户,您将看到一个 HTML 文件字段,允许您上传本地文件。创建文件后,您会发现文件名被存储在数据库中,并显示在管理仪表盘中。
您可以将 FileSystemStorage 替换为 S3Storage,以将文件上传到 S3 或任何兼容的 S3 API。
要查看 fastapi-storages 的完整功能和 API 参考,您可以访问官方文档:https://aminalaee.dev/fastapi-storages。
最后更新于