在文件上传期间,实际的文件数据存储在 request.FILES
.本词典中的每个条目都是 UploadedFile
对象(或子集)--上传文件的包装器。您通常会使用以下方法之一来访问上传的内容:
从文件中读取整个上载数据。注意这个方法:如果上传的文件很大,如果你试图把它读到内存中,它会压倒你的系统。你可能想用 chunks()
相反,见下文。
返回 True
如果上载的文件足够大,需要读取多个块。默认情况下,这将是任何大于2.5兆字节的文件,但这是可配置的;请参见下文。
返回文件块的生成器。如果 multiple_chunks()
是 True
,应在循环中使用此方法,而不是 read()
.
在实践中,它通常最容易使用 chunks()
所有的时间.循环遍历 chunks()
与其使用 read()
确保大文件不会占用系统的内存。
以下是一些有用的属性 UploadedFile
:
上载文件的名称(例如 my_file.txt
)
上载文件的大小(以字节为单位)。
与文件一起上载的内容类型头(例如 text/plain 或 application/pdf )像用户提供的任何数据一样,您不应该相信上载的文件实际上是这种类型。您仍然需要验证文件是否包含内容类型头声明的内容——“信任但验证”。
包含传递给 content-type
标头这通常由代表您拦截和处理文件上传的Google App Engine等服务提供。因此,您的处理程序可能不会接收上传的文件内容,而是接收指向该文件的URL或其他指针(请参阅 RFC 2388 )。
为了 text/* 内容类型、字符集(即 utf8
)由浏览器提供。同样,“信任但验证”是最好的策略。
备注
与常规Python文件一样,您可以通过迭代上传的文件来逐行读取文件::
for line in uploadedfile:
do_something_with(line)
Lines are split using universal newlines. The following are
recognized as ending a line: the Unix end-of-line convention '\n'
, the
Windows convention '\r\n'
, and the old Macintosh convention '\r'
.
亚类 UploadedFile
包括:
上载到临时位置(即流到磁盘)的文件。这个类由 TemporaryFileUploadHandler
. 除了方法 UploadedFile
,它还有一个附加方法:
上传到内存中的文件(即流到内存)。这个类由 MemoryFileUploadHandler
.
一起 MemoryFileUploadHandler
和 TemporaryFileUploadHandler
提供Django的默认文件上载行为,即将小文件读取到内存中,将大文件读取到磁盘上。它们位于 django.core.files.uploadhandler
.
文件上载处理程序,用于将上载流到内存中(用于小文件)。
上载处理程序,该处理程序使用 TemporaryUploadedFile
.
所有文件上载处理程序都应是 django.core.files.uploadhandler.FileUploadHandler
. 您可以在任何需要的地方定义上载处理程序。
自定义文件上载处理程序 must 定义以下方法:
从文件上载接收“数据块”。
raw_data
是包含上载数据的字节字符串。
start
文件中的位置 raw_data
块开始。
您返回的数据将被送入后续的上载处理程序' receive_data_chunk
方法。这样,一个处理程序可以是其他处理程序的“过滤器”。
返回 None
从 receive_data_chunk
从获取此块中短路剩余的上载处理程序。如果您自己存储上载的数据,并且不希望以后的处理程序存储数据的副本,那么这非常有用。
如果你举起 StopUpload
或A SkipFile
异常,将中止上载或完全跳过文件。
自定义上载处理程序还可以定义以下任意可选方法或属性:
“块”django的大小(以字节为单位)应存储到内存中,并馈送到处理程序中。也就是说,该属性控制输入的块的大小 FileUploadHandler.receive_data_chunk
.
为了获得最大的性能,块大小应该可以被 4
且不应超过2 GB(231 字节)。当多个处理程序提供多个块大小时,Django将使用任何处理程序定义的最小块大小。
默认值为64*210 字节,或64KB。
发出新文件上载开始的回调信号。在将任何数据输入到任何上载处理程序之前调用此函数。
field_name
是文件的字符串名称 <input>
字段。
file_name
是浏览器提供的文件名。
content_type
是浏览器提供的mime类型——例如 'image/jpeg'
.
content_length
是浏览器给定的图像长度。有时不会提供,而且 None
.
charset
是字符集(即 utf8
)由浏览器提供。喜欢 content_length
,有时不提供。
content_type_extra
有关该文件的额外信息是否来自 content-type
标题。见 UploadedFile.content_type_extra
.
此方法可能会引发 StopFutureHandlers
防止未来处理程序处理此文件的异常。
允许处理程序完全重写对原始HTTP输入的分析。
input_data
是一个类似文件的对象,它支持 read()
-ing。
META
与相同的对象 request.META
.
content_length
数据的长度 input_data
. 阅读不要超过 content_length
字节从 input_data
.
boundary
是此请求的MIME边界。
encoding
是请求的编码。
返回 None
如果要继续上载处理,或 (POST, FILES)
如果您想直接返回适合请求的新数据结构。
7月 22, 2024