文件系统

当使用 File 发送文件或使用 create_static_files_router() 提供文件服务时,除了从本地文件系统提供服务外,Litestar 还支持自定义文件系统,包括对 fsspec 的支持,这使得可以集成各种远程文件系统。

在其核心,文件系统是任何实现抽象 BaseFileSystem 类的类。默认情况下,Litestar 附带单个实现:BaseLocalFileSystem

支持的文件系统

除了基于 BaseFileSystem 实现的文件系统外,所有 fsspec 文件系统(同步和异步)都受支持。它们将分别包装在 FsspecSyncWrapperFsspecAsyncWrapper 中以符合通用接口。

fsspec

在接受 BaseFileSystem 的任何地方,通常也接受 fsspec 文件系统。

将它们设置在 Registry 中,或使用 maybe_wrap_fsspec_file_system() 手动包装一次并使用该包装器,这样它们就不必为每次使用再次包装,这仍然是有意义的:

或者

重要

如果使用异步 fsspec 文件系统,应始终使用 asynchronous=True 构造它,而不 传递 loop,以便 Litestar 可以使用它们的原生异步函数。

适配支持符号链接的文件系统

处理符号链接可能很棘手。为了确保 Litestar 始终做正确的事情,确实支持符号链接的现有文件系统可以注册为"可链接的",而无需实现 LinkableFileSystem

要将文件系统注册为可链接的,可以使用 register_as_linkable() 注册类型和解析此文件系统上符号链接的函数。

小技巧

默认情况下,fsspec.implementations.local.LocalFileSystem 已经注册为可链接的文件系统

注册表

为了更轻松的配置和测试,可以使用 FileSystemRegistry 在名称下注册文件系统,以便以后引用。

小技巧

添加 fsspec 文件系统时,它将自动被包装以与 BaseFileSystem 兼容。

FileSystemRegistry 实现为插件,除非显式传递其实例给应用程序,否则会自动设置。

如果需要,可以像访问任何其他插件一样访问注册表:

设置默认文件系统

对于涉及发送文件的操作,如果没有显式传递文件系统,Litestar 将使用注册表中定义的默认文件系统。它默认为 BaseLocalFileSystem,但可以配置为任何受支持的文件系统。