文件存储 API

获取默认存储类

Django 提供了获取默认存储类的便捷方式

storages
Django 4.2 中的新增功能。

STORAGES 定义的存储实例。

class DefaultStorage

DefaultStorage 提供对 STORAGESdefault 键定义的默认存储系统的延迟访问。 DefaultStorage 在内部使用 storages

default_storage

default_storageDefaultStorage 的实例。

get_storage_class(import_path=None)

返回实现存储 API 的类或模块。

在不带 import_path 参数调用时,get_storage_class 将返回 STORAGESdefault 键定义的默认存储系统。如果提供了 import_pathget_storage_class 将尝试从给定的路径导入类或模块,如果成功,将返回该类或模块。如果导入不成功,将引发异常。

自 4.2 版起已弃用:get_storage_class() 函数已弃用。请改用 storages

FileSystemStorage

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)

FileSystemStorage 在本地文件系统上实现基本文件存储。它继承自 Storage,并为其所有公共方法提供实现。

location

将保存文件的目录的绝对路径。默认为 MEDIA_ROOT 设置的值。

base_url

用于提供此位置存储的文件的 URL。默认为 MEDIA_URL 设置的值。

file_permissions_mode

文件在保存时将获得的文件系统权限。默认为 FILE_UPLOAD_PERMISSIONS

directory_permissions_mode

目录在保存时将获得的文件系统权限。默认为 FILE_UPLOAD_DIRECTORY_PERMISSIONS

注意

FileSystemStorage.delete() 方法在给定的文件名不存在时不会引发异常。

get_created_time(name)

返回系统的 ctime 的 datetime,即 os.path.getctime()。在某些系统(如 Unix)上,这是最后一次元数据更改的时间,而在其他系统(如 Windows)上,这是文件的创建时间。

InMemoryStorage

Django 4.2 中的新增功能。
class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)

InMemoryStorage 实现基于内存的文件存储。它没有持久性,但可以通过避免磁盘访问来加速测试,因此很有用。

location

分配给文件的目录名称的绝对路径。默认为 MEDIA_ROOT 设置的值。

base_url

用于提供此位置存储的文件的 URL。默认为 MEDIA_URL 设置的值。

file_permissions_mode

分配给文件的 file system 权限,提供与 FileSystemStorage 的兼容性。默认为 FILE_UPLOAD_PERMISSIONS

directory_permissions_mode

分配给目录的 file system 权限,提供与 FileSystemStorage 的兼容性。默认为 FILE_UPLOAD_DIRECTORY_PERMISSIONS

Storage

class Storage

Storage 提供了用于存储文件的标准化 API,以及一组所有其他存储系统可以继承或根据需要覆盖的默认行为。

注意

当方法返回朴素的 datetime 对象时,将使用的有效时区是 os.environ['TZ'] 的当前值;请注意,这通常是从 Django 的 TIME_ZONE 设置的。

delete(name)

删除 name 引用的文件。如果目标存储系统不支持删除,这将引发 NotImplementedError

exists(name)

如果存储系统中已存在给定名称引用的文件,则返回 True,如果名称可用于新文件,则返回 False

get_accessed_time(name)

返回文件的最后访问时间的 datetime。对于无法返回最后访问时间的存储系统,这将引发 NotImplementedError

如果 USE_TZTrue,则返回一个感知 datetime,否则返回本地时区的朴素 datetime

get_alternative_name(file_root, file_ext)

基于 file_rootfile_ext 参数返回一个替代文件名,在扩展名前追加一个下划线和一个 7 个字符的随机字母数字字符串。

get_available_name(name, max_length=None)

基于 name 参数返回一个文件名,该文件名是免费的,可用于在目标存储系统上写入新内容。

如果提供了 max_length,则文件名长度不会超过 max_length。如果找不到免费的唯一文件名,则会引发 SuspiciousFileOperation 异常。

如果已经存在具有 name 的文件,则调用 get_alternative_name() 以获取替代名称。

get_created_time(name)

返回文件的创建时间 datetime。对于无法返回创建时间的存储系统,这会引发 NotImplementedError

如果 USE_TZTrue,则返回一个感知 datetime,否则返回本地时区的朴素 datetime

get_modified_time(name)

返回文件最后修改时间的 datetime。对于无法返回最后修改时间的存储系统,这将引发 NotImplementedError

如果 USE_TZTrue,则返回一个感知 datetime,否则返回本地时区的朴素 datetime

get_valid_name(name)

返回基于 name 参数的文件名,该参数适用于目标存储系统。

generate_filename(filename)

通过调用 get_valid_name() 验证 filename,并返回要传递给 save() 方法的文件名。

filename 参数可能包含 FileField.upload_to 返回的路径。在这种情况下,路径不会传递给 get_valid_name(),但会预先添加到结果名称中。

默认实现使用 os.path 操作。如果这不适用于你的存储,请覆盖此方法。

listdir(path)

列出指定路径的内容,返回一个包含两个列表的 2 元组;第一个项目是目录,第二个项目是文件。对于无法提供此类列表的存储系统,这将引发 NotImplementedError

open(name, mode='rb')

打开由 name 给出的文件。请注意,虽然返回的文件保证是一个 File 对象,但它实际上可能是某个子类。对于远程文件存储,这意味着读取/写入可能非常慢,因此请注意。

path(name)

可以使用 Python 的标准 open() 打开文件的本地文件系统路径。对于无法从本地文件系统访问的存储系统,这将引发 NotImplementedError

save(name, content, max_length=None)

使用存储系统保存新文件,最好使用指定的文件名。如果已经存在一个具有此名称 name 的文件,存储系统可能会根据需要修改文件名以获取唯一名称。将返回存储文件的实际名称。

max_length 参数传递给 get_available_name()

content 参数必须是 django.core.files.File 的实例或可包装在 File 中的文件类似对象。

size(name)

返回 name 引用的文件总大小(以字节为单位)。对于无法返回文件大小的存储系统,这将引发 NotImplementedError

url(name)

返回可以访问 name 引用的文件内容的 URL。对于不支持通过 URL 访问的存储系统,这将引发 NotImplementedError

返回顶部