File 对象

django.core.files 模块及其子模块包含 Django 中用于基本文件处理的内置类。

File

class File(file_object, name=None)[source]

File 类是对 Python 文件对象 的一个简单的封装,并添加了一些 Django 特定的功能。在内部,Django 在需要表示文件时使用此类。

File 对象具有以下属性和方法

name

文件名称,包括相对于 MEDIA_ROOT 的相对路径。

size[source]

文件大小(以字节为单位)。

file

此类封装的底层 文件对象

在子类中小心使用此属性。

一些 File 的子类,包括 ContentFileFieldFile,可能会用其他对象替换此属性,而不是 Python 文件对象。在这些情况下,此属性本身可能是一个 File 子类(不一定与子类相同)。尽可能使用子类本身的属性和方法,而不是子类的 file 属性。

mode

文件的读/写模式。

open(mode=None, *args, **kwargs)[source]

打开或重新打开文件(这也执行 File.seek(0))。mode 参数允许与 Python 的内置 open() 相同的值。*args**kwargsmode 之后传递给 Python 的内置 open()

重新打开文件时,mode 将覆盖文件最初打开的任何模式;None 表示以原始模式重新打开。

它可以用作上下文管理器,例如 with file.open() as f:

Django 5.0 中的变更

添加了对传递 *args**kwargs 的支持。

__iter__()[source]

迭代文件,每次产生一行。

chunks(chunk_size=None)[source]

迭代文件,产生给定大小的“块”。chunk_size 默认为 64 KB。

这对于非常大的文件特别有用,因为它允许从磁盘流式传输文件,并避免将整个文件存储在内存中。

multiple_chunks(chunk_size=None)[source]

如果文件足够大,需要多个块才能访问其所有内容,则返回 True,给定某个 chunk_size

close()[source]

关闭文件。

除了列出的方法外,File 还公开了其 file 对象的以下属性和方法:encodingfilenoflushisattynewlinesreadreadintoreadlinereadlinesseektelltruncatewritewritelinesreadable()writable()seekable()

ContentFile

class ContentFile(content, name=None)[source]

ContentFile 类继承自 File,但与 File 不同的是,它操作的是字符串内容(也支持字节),而不是实际的文件。例如

from django.core.files.base import ContentFile

f1 = ContentFile("esta frase está en español")
f2 = ContentFile(b"these are bytes")

ImageFile

class ImageFile(file_object, name=None)[source]

Django 提供了一个专门用于图像的内置类。django.core.files.images.ImageFile 继承了 File 的所有属性和方法,此外还提供了以下内容:

width[source]

图像的宽度(以像素为单位)。

height[source]

图像的高度(以像素为单位)。

附加到对象的文件的附加方法

任何与对象关联的 File(如下面的 Car.photo)还将具有几个额外的方法。

File.save(name, content, save=True)

使用提供的文件名和内容保存新文件。这不会替换现有文件,而是会创建一个新文件并更新对象以指向它。如果 saveTrue,则在保存文件后将调用模型的 save() 方法。也就是说,这两行代码:

>>> car.photo.save("myphoto.jpg", content, save=False)
>>> car.save()

等效于:

>>> car.photo.save("myphoto.jpg", content, save=True)

请注意,content 参数必须是 FileFile 的子类的实例,例如 ContentFile

File.delete(save=True)

从模型实例中删除文件并删除底层文件。如果 saveTrue,则在删除文件后将调用模型的 save() 方法。

返回顶部