Django参考文档:文件存储 API
创始人
2026-04-29 18:25:23
0次

文件存储 API

获取默认的存储类:

Django 提供了便捷的方式来访问默认的存储类:

storages

一个类似字典的对象,允许使用 STORAGES 中定义的别名检索存储实例。

storages 有一个属性 backends,它默认为 STORAGES 中提供的原始值。

此外,storages 提供了一个 create_storage() 方法,它接受 STORAGES 中用于后端的字典,并返回基于该后端定义的存储实例。这对于需要在测试中实例化存储的第三方包可能很有用:

>>> from django.core.files.storage import storages
>>> storages.backends
{'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
 'staticfiles': {'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage'},
 'custom': {'BACKEND': 'package.storage.CustomStorage'}}
>>> storage_instance = storages.create_storage({"BACKEND": "package.storage.CustomStorage"})
class DefaultStorage[source]

DefaultStorage 提供了对由 STORAGES 中的 default 键定义的默认存储系统的延迟访问。DefaultStorage 内部使用了 storages。

default_storage

default_storage 是 DefaultStorage 的一个实例。

FileSystemStorage 类

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None, allow_overwrite=False)[source]

FileSystemStorage 类实现了本地文件系统的基本文件存储。它继承自 Storage 类,并提供了其中所有公开方法的实现。

Note

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

location[source]

存放文件的目录的绝对路径。 默认为你的 MEDIA_ROOT 配置的值。

base_url[source]

为存储在此位置的文件提供服务的 URL。默认为你的 MEDIA_URL 配置的值。

file_permissions_mode[source]

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

directory_permissions_mode[source]

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

allow_overwrite

控制是否允许保存新文件覆盖现有文件的标志。默认为 False。

get_created_time(name)[source]

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

InMemoryStorage 类

class InMemoryStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[source]

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

location[source]

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

base_url[source]

为存储在此位置的文件提供服务的 URL。默认为你的 MEDIA_URL 配置的值。

file_permissions_mode[source]

文件系统分配给文件的文件系统权限,为了与 FileSystemStorage 兼容而提供。默认值为 FILE_UPLOAD_PERMISSIONS。

directory_permissions_mode[source]

文件系统分配给目录的文件系统权限,为了与 FileSystemStorage 兼容而提供。默认值为 FILE_UPLOAD_DIRECTORY_PERMISSIONS。

Storage 类

class Storage[source]

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

Note

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

delete(name)[source]

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

exists(name)[source]

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

get_accessed_time(name)[source]

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

如果 USE_TZ 为 True,则返回一个处理过的 datetime,否则返回一个当地时区的未处理的 datetime。

get_alternative_name(file_root, file_ext)[source]

根据 file_root 和 file_ext 参数返回一个替代的文件名,一个下划线加上一个随机的 7 个字符的字母数字字符串被附加到文件名的扩展名之前。

get_available_name(name, max_length=None)[source]

返回一个基于 name 参数的文件名,该文件名在目标存储系统中是空闲的,可供新内容写入。

文件名的长度不会超过 max_length,如果提供的话。如果不能找到一个空闲的唯一文件名,将引发一个 SuspiciousFileOperation 异常。

如果一个带有 name 的文件已经存在,则调用 get_alternative_name() 来获得一个替代名称。

get_created_time(name)[source]

返回文件的创建时间的 datetime。对于不能返回创建时间的存储系统,将引发 NotImplementedError。

如果 USE_TZ 为 True,则返回一个处理过的 datetime,否则返回一个当地时区的未处理的 datetime。

get_modified_time(name)[source]

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

如果 USE_TZ 为 True,则返回一个处理过的 datetime,否则返回一个当地时区的未处理的 datetime。

get_valid_name(name)[source]

根据 name 参数返回一个适合在目标存储系统中使用的文件名。

generate_filename(filename)[source]

Validates the filename by calling get_valid_name and returns a filename to be passed to the save() method.

The filename argument may include a path as returned by FileField.upload_to. In that case, the path won't be passed to get_valid_name but will be prepended back to the resulting name.

默认实现使用 os.path 操作。如果不适合你的存储,请重写这个方法。

listdir(path)[source]

列出指定路径的内容,返回一个二元元组列表,第一项是目录,第二项是文件。对于不能提供这种列表的存储系统,这将引发一个 NotImplementedError。

open(name, mode='rb')[source]

打开由 name 给出的文件。请注意,虽然返回的文件保证是一个 File 对象,但实际上它可能是某个子类。在远程文件存储的情况下,这意味着读/写可能会很慢,所以要注意。

path(name)[source]

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

save(name, content, max_length=None)[source]

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

max_length 参数被传递给 get_available_name()。

content 参数必须是 django.core.files.File 的实例,或者是一个可以用 File 包装的类文件对象。

size(name)[source]

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

url(name)[source]

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

There are community-maintained solutions too!

Django has a vibrant ecosystem. There are storage backends highlighted on the Community Ecosystem page. The Django Packages Storage Backends grid has even more options for you!

相关内容

热门资讯

玻璃硬盘原理图 玻璃硬盘原理 玻璃硬盘,又称为磁头悬浮硬盘(Magnetic Head Flying Disk,MHFD),是一种...
Proton Mail 匿名注... 在数字监控无处不在的今天,你的邮箱可能比你想象的更「透明」——主流邮箱服务商在注册时就要求手机号验证...
闲鱼搜索规则与技巧 闲鱼最新特... 在闲鱼这个二手交易平台上,有很多用户都希望能够找到一些特殊的东西,比如一些罕见的收藏品、独特的手工艺...
家里监控最长能保存多少天的记录... 家里监控一般保存多久 随着科技的发展,家庭监控系统已经成为了许多家庭的必备设备,它不仅可以帮助我们...
华为tag有用吗 华为tag-... 华为Tag是华为手机中的一种功能,它可以帮助用户更好地管理自己的手机数据和应用,通过使用华为Tag,...
ps5手柄可用手机快充充电吗 ... PS5手柄,即PlayStation 5的DualSense手柄,是索尼公司为PlayStation...
QQ音乐提示代理模式可能无法正... QQ音乐提示代理模式可能无法正常访问,如上图所示,是怎么回事呢? 这个可能和你的网络设置有关系,首先...
收到微信有提示音怎么去掉 微信... 微信收到信息没有提示音,可能是由多种原因导致的,以下是一些可能的原因及解决方法: 1. 手机静音或...
网站服务器不稳定怎么解决 外网... 服务器稳定性是任何在线业务的关键,无论是网站、应用还是其他在线服务,有时候,即使我们尽了最大的努力,...
a100显卡对应的cuda版本 在进行GPU加速的编程中,CUDA是常用的架构和平台,其版本和显卡型号之间存在着一定的对应关系。本篇...