Skip to main content

File 对象

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

File

class File(file_object)[源代码]

File 类是一个围绕Python 文件对象 的一个薄包装,具有一些Django特定的添加。在内部,Django需要表示一个文件时使用这个类。

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

name

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

size

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

file

这个类包装的底层 文件对象

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

File 的一些子类,包括 ContentFileFieldFile,可以用除了Python 文件对象 之外的对象替换该属性。在这些情况下,该属性本身可以是 File 子类(并且不一定是相同的子类)。尽可能使用子类本身的属性和方法,而不是子类的 file 属性的属性和方法。

mode

文件的读/写模式。

open(mode=None)[源代码]

打开或重新打开文件(也是 File.seek(0))。 mode 参数允许与Python的内置 open() 相同的值。

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

read(num_bytes=None)

从文件中读取内容。可选的 size 是要读取的字节数;如果没有指定,文件将被读取到结束。

__iter__()[源代码]

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

chunks(chunk_size=None)[源代码]

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

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

multiple_chunks(chunk_size=None)[源代码]

返回 True,如果文件足够大,需要多个块访问其所有内容给一些 chunk_size

write(content)

将指定的内容字符串写入文件。根据后台存储系统,此内容可能无法完全提交,直到在文件上调用 close()

close()[源代码]

关闭文件。

除了列出的方法之外,File 暴露其 file 对象的以下属性和方法:encodingfilenoflushisattynewlinesreadreadintoreadlinesseeksoftspacetelltruncatewritelinesxreadlines。如果你使用Python 3,seekable 方法也可用。

Changed in Django 1.9:

添加 seekable 方法。

ContentFile

class ContentFile(File)[源代码]

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

from __future__ import unicode_literals
from django.core.files.base import ContentFile

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

ImageFile

class ImageFile(file_object)[源代码]

Django为图像提供了一个内置类。 django.core.files.images.ImageFile 继承 File 的所有属性和方法,并且还提供以下内容:

width

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

height

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

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

与对象相关联的任何 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() 方法将被调用。