{"title":"上传的文件和上传处理程序","version":"6.0","locale":"zh-hans","docname":"ref/files/uploads","url":"/zh-hans/6.0/ref/files/uploads/","canonical":"https://djangodocs.dev/zh-hans/6.0/ref/files/uploads/","summary":"在文件上传过程中，实际的文件数据存储在 request.FILES 中。这个字典中的每一个条目都是一个 UploadedFile 对象（或一个子类）—— 一个所上传文件的包装器。","html":"<span id=\"uploaded-files-and-upload-handlers\"></span><h1>上传的文件和上传处理程序<a class=\"heading-anchor\" href=\"#module-django.core.files.uploadedfile\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"uploaded-files\">\n<h2>上传的文件<a class=\"heading-anchor\" href=\"#uploaded-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">UploadedFile</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>在文件上传过程中，实际的文件数据存储在 <a class=\"reference internal\" href=\"/zh-hans/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\">request.FILES</code></a> 中。这个字典中的每一个条目都是一个 <code class=\"docutils literal notranslate\">UploadedFile</code> 对象（或一个子类）—— 一个所上传文件的包装器。你通常会使用这些方法之一来访问上传的内容：</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.read\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">read</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.read\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>从文件中读取整个上传的数据。小心使用这个方法：如果上传的文件很大，如果你试图把它读到内存中，它可能会让你的系统不堪重负。你可能会想使用 <code class=\"docutils literal notranslate\">chunks()</code> 来代替；见下文。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.multiple_chunks\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">multiple_chunks</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">chunk_size<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.multiple_chunks\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>如果上传的文件足够大，需要分块读取，返回 <code class=\"docutils literal notranslate\">True</code>。默认情况下是大于 2.5 兆字节的文件，但这是可以配置的，见下文。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.chunks\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">chunks</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">chunk_size<span class=\"o\">=</span><span class=\"default_value\">None</span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.chunks\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个生成器，返回文件的块。如果 <code class=\"docutils literal notranslate\">multiple_chunks()</code> 是 <code class=\"docutils literal notranslate\">True</code>，你应该在循环中使用这个方法而不是 <code class=\"docutils literal notranslate\">read()</code>。</p>\n<p>在实践中，通常最简单的做法是一直使用 <code class=\"docutils literal notranslate\">chunks()</code>。循环使用 <code class=\"docutils literal notranslate\">chunks()</code> 而不是使用 <code class=\"docutils literal notranslate\">read()</code> 可以确保大文件不会过度占用系统的内存。</p>\n</dd></dl>\n\n<p>以下是 <code class=\"docutils literal notranslate\">UploadedFile</code> 的一些有用属性：</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.name\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">name</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.name\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>上传的文件名称（如 <code class=\"docutils literal notranslate\">my_file.txt</code>）。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.size\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">size</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>上传文件的大小，以字节为单位。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.content_type\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">content_type</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.content_type\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>与文件一起上传的内容类型头（例如 <em class=\"mimetype\">text/plain</em> 或 <em class=\"mimetype\">application/pdf</em>）。就像用户提供的任何数据一样，你不应该相信上传的文件实际上是这种类型。你仍然需要验证该文件是否包含内容类型头所声称的内容 —— “信任但验证”。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.content_type_extra\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">content_type_extra</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.content_type_extra\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>包含传递给 <code class=\"docutils literal notranslate\">content-type</code> 头的额外参数的字典。这通常是由服务提供的，比如 Google App Engine，它代表你拦截和处理文件上传。因此，您的处理程序可能不会收到上传的文件内容，而是收到一个 URL 或其他指向文件的指针（参见 <span class=\"target\" id=\"index-4\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc2388.html#section-5.3\"><strong>RFC 2388</strong></a>）。</p>\n</dd></dl>\n\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.UploadedFile.charset\">\n<span class=\"sig-prename descclassname\">UploadedFile.</span><span class=\"sig-name descname\">charset</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.UploadedFile.charset\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>对于 <em class=\"mimetype\">text/*</em> 内容类型，浏览器提供的字符集（即 <code class=\"docutils literal notranslate\">utf8</code>）。同样，“信任但验证” 是这里的最佳政策。</p>\n</dd></dl>\n\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>像普通的 Python 文件一样，你可以通过迭代上传的文件来逐行读取文件：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">for</span> line <span class=\"ow\">in</span> uploadedfile<span class=\"p\">:</span>\n    do_something_with<span class=\"p\">(</span>line<span class=\"p\">)</span>\n</code></pre></div>\n<p>使用 <span class=\"target\" id=\"index-5\"></span><a class=\"pep reference external\" href=\"https://peps.python.org/pep-0278/\"><strong>通用换行符</strong></a> 来分割行。以下是公认的行结束方式：Unix 的行末约定 <code class=\"docutils literal notranslate\">'\\n'</code>，Windows 的约定 <code class=\"docutils literal notranslate\">'\\r\\n'</code>，以及旧的 Macintosh 约定 <code class=\"docutils literal notranslate\">'\\r'</code>。</p>\n</aside>\n<p><code class=\"docutils literal notranslate\">UploadedFile</code> 的子类包括：</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.TemporaryUploadedFile\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TemporaryUploadedFile</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.TemporaryUploadedFile\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个文件上传到一个临时位置（即传输到磁盘）。这个类被 <a class=\"reference internal\" href=\"#django.core.files.uploadhandler.TemporaryFileUploadHandler\" title=\"django.core.files.uploadhandler.TemporaryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\">TemporaryFileUploadHandler</code></a> 使用。除了 <a class=\"reference internal\" href=\"#django.core.files.uploadedfile.UploadedFile\" title=\"django.core.files.uploadedfile.UploadedFile\"><code class=\"xref py py-class docutils literal notranslate\">UploadedFile</code></a> 的方法外，它还有一个额外的方法：</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.TemporaryUploadedFile.temporary_file_path\">\n<span class=\"sig-prename descclassname\">TemporaryUploadedFile.</span><span class=\"sig-name descname\">temporary_file_path</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.TemporaryUploadedFile.temporary_file_path\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>返回临时上传文件的完整路径。</p>\n</dd></dl>\n\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadedfile.InMemoryUploadedFile\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">InMemoryUploadedFile</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadedfile.InMemoryUploadedFile\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个上传到内存中的文件（即传输到内存）。这个类被 <a class=\"reference internal\" href=\"#django.core.files.uploadhandler.MemoryFileUploadHandler\" title=\"django.core.files.uploadhandler.MemoryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\">MemoryFileUploadHandler</code></a> 使用。</p>\n</dd></dl>\n\n</section>\n<section id=\"module-django.core.files.uploadhandler\">\n<span id=\"built-in-upload-handlers\"></span><h2>内置上传处理程序<a class=\"heading-anchor\" href=\"#module-django.core.files.uploadhandler\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><a class=\"reference internal\" href=\"#django.core.files.uploadhandler.MemoryFileUploadHandler\" title=\"django.core.files.uploadhandler.MemoryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\">MemoryFileUploadHandler</code></a> 和 <a class=\"reference internal\" href=\"#django.core.files.uploadhandler.TemporaryFileUploadHandler\" title=\"django.core.files.uploadhandler.TemporaryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\">TemporaryFileUploadHandler</code></a> 共同提供了 Django 默认的文件上传行为，即向内存中读取小文件，向磁盘中读取大文件。它们位于 <code class=\"docutils literal notranslate\">django.core.files.uploadhandler</code> 中。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.MemoryFileUploadHandler\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">MemoryFileUploadHandler</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.MemoryFileUploadHandler\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>文件上传处理程序，将上传的文件以流式传输到内存中（用于小文件）。</p>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.TemporaryFileUploadHandler\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">TemporaryFileUploadHandler</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.TemporaryFileUploadHandler\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>使用 <code class=\"xref py py-class docutils literal notranslate\">TemporaryUploadedFile</code> 将数据流式传输到临时文件的上传处理程序。</p>\n</section>\n<section id=\"writing-custom-upload-handlers\">\n<span id=\"custom-upload-handlers\"></span><h2>编写自定义上传处理程序<a class=\"heading-anchor\" href=\"#writing-custom-upload-handlers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">FileUploadHandler</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>所有的文件上传处理程序应该是 <code class=\"docutils literal notranslate\">django.core.files.uploadhandler.FileUploadHandler</code> 的子类。你可以在任何地方定义上传处理程序。</p>\n<section id=\"required-methods\">\n<h3>必要方法<a class=\"heading-anchor\" href=\"#required-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>自定义文件上传处理程序 <strong>必须</strong> 定义以下方法：</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.receive_data_chunk\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">receive_data_chunk</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">raw_data</em>, <em class=\"sig-param\">start</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.receive_data_chunk\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>接收文件上传的 “块” 数据。</p>\n<p><code class=\"docutils literal notranslate\">raw_data</code> 是一个包含上传数据的字节字符串。</p>\n<p><code class=\"docutils literal notranslate\">start</code> 是文件中 <code class=\"docutils literal notranslate\">raw_data</code> 块开始的位置。</p>\n<p>你返回的数据将被输入到后续的上传处理程序的 <code class=\"docutils literal notranslate\">receive_data_chunk</code> 方法中。通过这种方式，一个处理程序可以成为其他处理程序的 “过滤器”。</p>\n<p>从 <code class=\"docutils literal notranslate\">receive_data_chunk</code> 中返回 <code class=\"docutils literal notranslate\">None</code>，以短路剩余的上传处理程序。如果你自己存储上传的数据，并且不希望后续的处理程序存储数据的副本，这很有用。</p>\n<p>如果引发一个 <code class=\"docutils literal notranslate\">StopUpload</code> 或 <code class=\"docutils literal notranslate\">SkipFile</code> 异常，上传将被中止或文件将被完全跳过。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.file_complete\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">file_complete</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">file_size</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.file_complete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>当文件上传完毕时调用。</p>\n<p>处理程序应返回一个 <code class=\"docutils literal notranslate\">UploadedFile</code> 对象，该对象将存储在 <code class=\"docutils literal notranslate\">request.FILES</code> 中。处理程序也可以返回 <code class=\"docutils literal notranslate\">None</code> 以表明 <code class=\"docutils literal notranslate\">UploadedFile</code> 对象应来自后续的上传处理程序。</p>\n</dd></dl>\n\n</section>\n<section id=\"optional-methods\">\n<h3>可选方法<a class=\"heading-anchor\" href=\"#optional-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>自定义上传处理程序也可以定义以下任何一个可选方法或属性：</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.chunk_size\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">chunk_size</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.chunk_size\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>Django 应该存储到内存中并反馈给处理程序的 “块” 的大小，以字节为单位。也就是说，这个属性控制了输入到 <code class=\"docutils literal notranslate\">FileUploadHandler.receive_data_chunk</code> 的数据块的大小。</p>\n<p>为了获得最大的性能，分块大小应该被 <code class=\"docutils literal notranslate\">4</code> 整除，并且大小不能超过 2GB（2<sup>31</sup> 字节）。当有多个处理程序提供的多个分块大小时，Django 将使用任何处理程序定义的最小分块大小。</p>\n<p>默认为 64*2<sup>10</sup> 字节，即 64KB。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.new_file\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">new_file</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">field_name</em>, <em class=\"sig-param\">file_name</em>, <em class=\"sig-param\">content_type</em>, <em class=\"sig-param\">content_length</em>, <em class=\"sig-param\">charset</em>, <em class=\"sig-param\">content_type_extra</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.new_file\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>回调信号，表示一个新的文件上传开始。在任何数据被送入任何上传处理程序之前，这个回调被调用。</p>\n<p><code class=\"docutils literal notranslate\">field_name</code> 是文件 <code class=\"docutils literal notranslate\">&lt;input&gt;</code> 字段的字符串名称。</p>\n<p><code class=\"docutils literal notranslate\">file_name</code> 是浏览器提供的文件名。</p>\n<p><code class=\"docutils literal notranslate\">content_type</code> 是浏览器提供的 MIME 类型 —— 例如 <code class=\"docutils literal notranslate\">'image/jpeg'</code>。</p>\n<p><code class=\"docutils literal notranslate\">content_length</code> 是浏览器给出的图像长度。有时不会提供，而是 <code class=\"docutils literal notranslate\">None</code>。</p>\n<p><code class=\"docutils literal notranslate\">charset</code> 是浏览器提供的字符集（即 <code class=\"docutils literal notranslate\">utf8</code>）。与 <code class=\"docutils literal notranslate\">content_length</code> 一样，有时不会提供。</p>\n<p><code class=\"docutils literal notranslate\">content_type_extra</code> 是关于文件的 <code class=\"docutils literal notranslate\">content-type</code> 头的额外信息。参见 <a class=\"reference internal\" href=\"#django.core.files.uploadedfile.UploadedFile.content_type_extra\" title=\"django.core.files.uploadedfile.UploadedFile.content_type_extra\"><code class=\"xref py py-attr docutils literal notranslate\">UploadedFile.content_type_extra</code></a>。</p>\n<p>这个方法可能会引发一个 <code class=\"docutils literal notranslate\">StopFutureHandlers</code> 异常，以防止后续处理程序处理这个文件。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.upload_complete\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">upload_complete</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.upload_complete\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>回调信号，表示整个上传（所有文件）已经完成。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.upload_interrupted\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">upload_interrupted</span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.upload_interrupted\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>回调信号，表明上传被中断，例如，当用户在文件上传过程中关闭他们的浏览器。</p>\n</dd></dl>\n\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.core.files.uploadhandler.FileUploadHandler.handle_raw_input\">\n<span class=\"sig-prename descclassname\">FileUploadHandler.</span><span class=\"sig-name descname\">handle_raw_input</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">input_data</em>, <em class=\"sig-param\">META</em>, <em class=\"sig-param\">content_length</em>, <em class=\"sig-param\">boundary</em>, <em class=\"sig-param\">encoding</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.core.files.uploadhandler.FileUploadHandler.handle_raw_input\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>允许处理程序完全覆盖原始 HTTP 输入的解析。</p>\n<p><code class=\"docutils literal notranslate\">input_data</code> 是一个支持 <code class=\"docutils literal notranslate\">read()</code>-ing 的类文件对象。</p>\n<p><code class=\"docutils literal notranslate\">META</code> 与 <code class=\"docutils literal notranslate\">request.META</code> 是同一个对象。</p>\n<p><code class=\"docutils literal notranslate\">content_length</code> 是 <code class=\"docutils literal notranslate\">input_data</code> 中数据的长度。不要从 <code class=\"docutils literal notranslate\">input_data</code> 中读取超过 <code class=\"docutils literal notranslate\">content_length</code> 的字节。</p>\n<p><code class=\"docutils literal notranslate\">boundary</code> 是本次请求的 MIME 边界。</p>\n<p><code class=\"docutils literal notranslate\">encoding</code> 是请求的编码。</p>\n<p>如果想继续上传处理，则返回 <code class=\"docutils literal notranslate\">None</code>，如果想直接返回适合请求的新数据结构，则返回 <code class=\"docutils literal notranslate\">(POST，FILES)</code> 的元组。</p>\n</dd></dl>\n\n</section>\n</section>","rootId":"module-django.core.files.uploadedfile","toc":[{"title":"上传的文件","anchor":"uploaded-files","children":[]},{"title":"内置上传处理程序","anchor":"module-django.core.files.uploadhandler","children":[]},{"title":"编写自定义上传处理程序","anchor":"writing-custom-upload-handlers","children":[{"title":"必要方法","anchor":"required-methods","children":[]},{"title":"可选方法","anchor":"optional-methods","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/6.0/ref/"},{"docname":"ref/files/index","title":"文件处理","url":"/zh-hans/6.0/ref/files/"}],"prev":{"docname":"ref/files/storage","title":"文件存储 API","url":"/zh-hans/6.0/ref/files/storage/"},"next":{"docname":"ref/forms/index","title":"表单","url":"/zh-hans/6.0/ref/forms/"},"formats":{"html":"/zh-hans/6.0/ref/files/uploads/","markdown":"/zh-hans/6.0/ref/files/uploads.md","json":"/zh-hans/6.0/ref/files/uploads.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/files/uploads.txt","official":"https://docs.djangoproject.com/zh-hans/6.0/ref/files/uploads/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}