Skip to main content

文件存储API

获取当前存储类

Django提供了两种方便的方法来访问当前存储类:

class DefaultStorage[源代码]

DefaultStorage 提供对由 DEFAULT_FILE_STORAGE 定义的当前默认存储系统的延迟访问。 DefaultStorage 内部使用 get_storage_class()

get_storage_class(import_path=None)[源代码]

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

当不使用 import_path 参数调用时,get_storage_class 将返回由 DEFAULT_FILE_STORAGE 定义的当前默认存储系统。如果提供 import_pathget_storage_class 将尝试从给定路径导入类或模块,并且如果成功则返回它。如果导入不成功,将引发异常。

FileSystemStorage

class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)[源代码]

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

location

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

base_url

为存储在此位置的文件提供服务的网址。默认为您的 MEDIA_URL 设置的值。

file_permissions_mode

保存文件时将接收的文件系统权限。默认为 FILE_UPLOAD_PERMISSIONS

directory_permissions_mode

保存目录时将接收的文件系统权限。默认为 FILE_UPLOAD_DIRECTORY_PERMISSIONS

注解

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

Storage

class Storage[源代码]

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

注解

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

accessed_time(name)[源代码]

返回一个原始的 datetime 对象,其中包含文件的最后访问时间。对于不能返回最后访问时间的存储系统,这将提高 NotImplementedError

1.10 版后已移除: 请改用 get_accessed_time()

created_time(name)[源代码]

返回包含文件创建时间的原始 datetime 对象。对于不能返回创建时间的存储系统,这将提高 NotImplementedError

1.10 版后已移除: 请改用 get_created_time()

delete(name)[源代码]

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

exists(name)[源代码]

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

get_accessed_time(name)
New in Django 1.10.

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

如果 USE_TZTrue,则返回感知的 datetime,否则返回本地时区中的原始 datetime

get_available_name(name, max_length=None)[源代码]

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

文件名的长度不会超过 max_length (如果提供)。如果找不到一个自由唯一的文件名,将会引发一个 SuspiciousFileOperation 异常。

如果具有 name 的文件已存在,则下划线加上随机的7个字母数字字符串将附加到扩展名之前的文件名。

get_created_time(name)
New in Django 1.10.

返回文件创建时间的 datetime。对于无法返回创建时间的存储系统,这将提高 NotImplementedError

如果 USE_TZTrue,则返回感知的 datetime,否则返回本地时区中的原始 datetime

get_modified_time(name)
New in Django 1.10.

返回文件的上次修改时间的 datetime。对于无法返回上次修改时间的存储系统,这将提高 NotImplementedError

如果 USE_TZTrue,则返回感知的 datetime,否则返回本地时区中的原始 datetime

get_valid_name(name)[源代码]

返回基于适合在目标存储系统上使用的 name 参数的文件名。

generate_filename(filename)
New in Django 1.10.

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

filename 参数可以包括由 FileField.upload_to 返回的路径。在这种情况下,路径不会传递给 get_valid_name(),而是会预先添加到生成的名称。

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

listdir(path)[源代码]

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

modified_time(name)[源代码]

返回包含上次修改时间的初始 datetime 对象。对于不能返回最后修改时间的存储系统,这将提高 NotImplementedError

1.10 版后已移除: 请改用 get_modified_time()

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