{"title":"File Uploads","version":"6.0","locale":"it","docname":"topics/http/file-uploads","url":"/it/6.0/topics/http/file-uploads/","canonical":"https://djangodocs.dev/it/6.0/topics/http/file-uploads/","summary":"When Django handles a file upload, the file data ends up placed in request.FILES (for more on the request object see the documentation for request and response…","html":"<h1>File Uploads<a class=\"heading-anchor\" href=\"#file-uploads\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>When Django handles a file upload, the file data ends up placed in\n<a class=\"reference internal\" href=\"/it/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a> (for more on the\n<code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> object see the documentation for <a class=\"reference internal\" href=\"/it/6.0/ref/request-response/\"><span class=\"doc\">request and response objects</span></a>). This document explains how files are stored on disk\nand in memory, and how to customize the default behavior.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avvertimento</p>\n<p>There are security risks if you are accepting uploaded content from\nuntrusted users! See the security guide’s topic on\n<a class=\"reference internal\" href=\"/it/6.0/topics/security/#user-uploaded-content-security\"><span class=\"std std-ref\">User-uploaded content</span></a> for mitigation details.</p>\n</aside>\n<section id=\"basic-file-uploads\">\n<h2>Basic file uploads<a class=\"heading-anchor\" href=\"#basic-file-uploads\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Consider a form containing a <a class=\"reference internal\" href=\"/it/6.0/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UploadFileForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">file</span> <span class=\"o\">=</span> <span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">()</span>\n</code></pre></figure>\n<p>A view handling this form will receive the file data in\n<a class=\"reference internal\" href=\"/it/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a>, which is a dictionary\ncontaining a key for each <a class=\"reference internal\" href=\"/it/6.0/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> (or\n<a class=\"reference internal\" href=\"/it/6.0/ref/forms/fields/#django.forms.ImageField\" title=\"django.forms.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a>, or other <a class=\"reference internal\" href=\"/it/6.0/ref/forms/fields/#django.forms.FileField\" title=\"django.forms.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>\nsubclass) in the form. So the data from the above form would\nbe accessible as <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES['file']</span></code>.</p>\n<p>Note that <a class=\"reference internal\" href=\"/it/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a> will only\ncontain data if the request method was <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, at least one file field was\nactually posted, and the <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> that posted the request has the attribute\n<code class=\"docutils literal notranslate\"><span class=\"pre\">enctype=&quot;multipart/form-data&quot;</span></code>. Otherwise, <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> will be empty.</p>\n<p>Most of the time, you’ll pass the file data from <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> into the form as\ndescribed in <a class=\"reference internal\" href=\"/it/6.0/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binding uploaded files to a form</span></a>. This would look something like:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UploadFileForm</span>\n\n<span class=\"c1\"># Imaginary function to handle an uploaded file.</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">somewhere</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">handle_uploaded_file</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">upload_file</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UploadFileForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">handle_uploaded_file</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">[</span><span class=\"s2\">&quot;file&quot;</span><span class=\"p\">])</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/success/url/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UploadFileForm</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;upload.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></figure>\n<p>Notice that we have to pass <a class=\"reference internal\" href=\"/it/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a> into the form’s constructor; this is how file\ndata gets bound into a form.</p>\n<p>Here’s a common way you might handle an uploaded file:</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\">def</span><span class=\"w\"> </span><span class=\"nf\">handle_uploaded_file</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">):</span>\n    <span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;some/file/name.txt&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;wb+&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">destination</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">chunk</span> <span class=\"ow\">in</span> <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">chunks</span><span class=\"p\">():</span>\n            <span class=\"n\">destination</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">chunk</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Looping over <code class=\"docutils literal notranslate\"><span class=\"pre\">UploadedFile.chunks()</span></code> instead of using <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> ensures that\nlarge files don’t overwhelm your system’s memory.</p>\n<p>There are a few other methods and attributes available on <code class=\"docutils literal notranslate\"><span class=\"pre\">UploadedFile</span></code>\nobjects; see <a class=\"reference internal\" href=\"/it/6.0/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile\" title=\"django.core.files.uploadedfile.UploadedFile\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">UploadedFile</span></code></a> for a complete reference.</p>\n<section id=\"handling-uploaded-files-with-a-model\">\n<h3>Handling uploaded files with a model<a class=\"heading-anchor\" href=\"#handling-uploaded-files-with-a-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you’re saving a file on a <a class=\"reference internal\" href=\"/it/6.0/ref/models/instances/#django.db.models.Model\" title=\"django.db.models.Model\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Model</span></code></a> with a\n<a class=\"reference internal\" href=\"/it/6.0/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>, using a <a class=\"reference internal\" href=\"/it/6.0/topics/forms/modelforms/#django.forms.ModelForm\" title=\"django.forms.ModelForm\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelForm</span></code></a>\nmakes this process much easier. The file object will be saved to the location\nspecified by the <a class=\"reference internal\" href=\"/it/6.0/ref/models/fields/#django.db.models.FileField.upload_to\" title=\"django.db.models.FileField.upload_to\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">upload_to</span></code></a> argument of the\ncorresponding <a class=\"reference internal\" href=\"/it/6.0/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a> when calling\n<code class=\"docutils literal notranslate\"><span class=\"pre\">form.save()</span></code>:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelFormWithFileField</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">upload_file</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModelFormWithFileField</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># file is saved</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/success/url/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModelFormWithFileField</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;upload.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>If you are constructing an object manually, you can assign the file object from\n<a class=\"reference internal\" href=\"/it/6.0/ref/request-response/#django.http.HttpRequest.FILES\" title=\"django.http.HttpRequest.FILES\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code></a> to the file field in the\nmodel:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">UploadFileForm</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ModelWithFileField</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">upload_file</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UploadFileForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">instance</span> <span class=\"o\">=</span> <span class=\"n\">ModelWithFileField</span><span class=\"p\">(</span><span class=\"n\">file_field</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span><span class=\"p\">[</span><span class=\"s2\">&quot;file&quot;</span><span class=\"p\">])</span>\n            <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"s2\">&quot;/success/url/&quot;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UploadFileForm</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;upload.html&quot;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s2\">&quot;form&quot;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n</code></pre></div>\n<p>If you are constructing an object manually outside of a request, you can assign\na <a class=\"reference internal\" href=\"/it/6.0/ref/files/file/#django.core.files.File\" title=\"django.core.files.File\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">File</span></code></a> like object to the\n<a class=\"reference internal\" href=\"/it/6.0/ref/models/fields/#django.db.models.FileField\" title=\"django.db.models.FileField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileField</span></code></a>:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.management.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">BaseCommand</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files.base</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">ContentFile</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyCommand</span><span class=\"p\">(</span><span class=\"n\">BaseCommand</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">handle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">options</span><span class=\"p\">):</span>\n        <span class=\"n\">content_file</span> <span class=\"o\">=</span> <span class=\"n\">ContentFile</span><span class=\"p\">(</span><span class=\"sa\">b</span><span class=\"s2\">&quot;Hello world!&quot;</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;hello-world.txt&quot;</span><span class=\"p\">)</span>\n        <span class=\"n\">instance</span> <span class=\"o\">=</span> <span class=\"n\">ModelWithFileField</span><span class=\"p\">(</span><span class=\"n\">file_field</span><span class=\"o\">=</span><span class=\"n\">content_file</span><span class=\"p\">)</span>\n        <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"uploading-multiple-files\">\n<span id=\"id1\"></span><h3>Uploading multiple files<a class=\"heading-anchor\" href=\"#uploading-multiple-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>If you want to upload multiple files using one form field, create a subclass\nof the field’s widget and set its <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_multiple_selected</span></code> class attribute\nto <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>In order for such files to be all validated by your form (and have the value of\nthe field include them all), you will also have to subclass <code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code>. See\nbelow for an example.</p>\n<aside class=\"admonition-multiple-file-field admonition\">\n<p class=\"admonition-title\">Multiple file field</p>\n<p>Django is likely to have a proper multiple file field support at some point\nin the future.</p>\n</aside>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">forms.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">forms</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultipleFileInput</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">ClearableFileInput</span><span class=\"p\">):</span>\n    <span class=\"n\">allow_multiple_selected</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MultipleFileField</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">setdefault</span><span class=\"p\">(</span><span class=\"s2\">&quot;widget&quot;</span><span class=\"p\">,</span> <span class=\"n\">MultipleFileInput</span><span class=\"p\">())</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">clean</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">single_file_clean</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">clean</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"nb\">list</span><span class=\"p\">,</span> <span class=\"nb\">tuple</span><span class=\"p\">)):</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">single_file_clean</span><span class=\"p\">(</span><span class=\"n\">d</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">d</span> <span class=\"ow\">in</span> <span class=\"n\">data</span><span class=\"p\">]</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">single_file_clean</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"p\">)]</span>\n        <span class=\"k\">return</span> <span class=\"n\">result</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FileFieldForm</span><span class=\"p\">(</span><span class=\"n\">forms</span><span class=\"o\">.</span><span class=\"n\">Form</span><span class=\"p\">):</span>\n    <span class=\"n\">file_field</span> <span class=\"o\">=</span> <span class=\"n\">MultipleFileField</span><span class=\"p\">()</span>\n</code></pre></figure>\n<p>Then override the <code class=\"docutils literal notranslate\"><span class=\"pre\">form_valid()</span></code> method of your\n<a class=\"reference internal\" href=\"/it/6.0/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView\" title=\"django.views.generic.edit.FormView\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FormView</span></code></a> subclass to handle multiple file\nuploads:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"python\"><figcaption class=\"code-block-caption\"><code class=\"docutils literal notranslate\"><span class=\"pre\">views.py</span></code></figcaption>\n<div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python</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=\"Python code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.generic.edit</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FormView</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.forms</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FileFieldForm</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">FileFieldFormView</span><span class=\"p\">(</span><span class=\"n\">FormView</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">FileFieldForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;upload.html&quot;</span>  <span class=\"c1\"># Replace with your template.</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;...&quot;</span>  <span class=\"c1\"># Replace with your URL or reverse().</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s2\">&quot;file_field&quot;</span><span class=\"p\">]</span>\n        <span class=\"k\">for</span> <span class=\"n\">f</span> <span class=\"ow\">in</span> <span class=\"n\">files</span><span class=\"p\">:</span>\n            <span class=\"o\">...</span>  <span class=\"c1\"># Do something with each file.</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n</code></pre></figure>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Avvertimento</p>\n<p>This will allow you to handle multiple files at the form level only. Be\naware that you cannot use it to put multiple files on a single model\ninstance (in a single field), for example, even if the custom widget is used\nwith a form field related to a model <code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code>.</p>\n</aside>\n</section>\n</section>\n<section id=\"upload-handlers\">\n<span id=\"file-upload-handlers\"></span><h2>Upload Handlers<a class=\"heading-anchor\" href=\"#upload-handlers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>When a user uploads a file, Django passes off the file data to an <em>upload\nhandler</em> – a small class that handles file data as it gets uploaded. Upload\nhandlers are initially defined in the <a class=\"reference internal\" href=\"/it/6.0/ref/settings/#std-setting-FILE_UPLOAD_HANDLERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FILE_UPLOAD_HANDLERS</span></code></a> setting,\nwhich defaults to:</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=\"p\">[</span>\n    <span class=\"s2\">&quot;django.core.files.uploadhandler.MemoryFileUploadHandler&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.core.files.uploadhandler.TemporaryFileUploadHandler&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Together <a class=\"reference internal\" href=\"/it/6.0/ref/files/uploads/#django.core.files.uploadhandler.MemoryFileUploadHandler\" title=\"django.core.files.uploadhandler.MemoryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MemoryFileUploadHandler</span></code></a> and\n<a class=\"reference internal\" href=\"/it/6.0/ref/files/uploads/#django.core.files.uploadhandler.TemporaryFileUploadHandler\" title=\"django.core.files.uploadhandler.TemporaryFileUploadHandler\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">TemporaryFileUploadHandler</span></code></a> provide Django’s default file upload\nbehavior of reading small files into memory and large ones onto disk.</p>\n<p>You can write custom handlers that customize how Django handles files. You\ncould, for example, use custom handlers to enforce user-level quotas, compress\ndata on the fly, render progress bars, and even send data to another storage\nlocation directly without storing it locally. See <a class=\"reference internal\" href=\"/it/6.0/ref/files/uploads/#custom-upload-handlers\"><span class=\"std std-ref\">Writing custom upload handlers</span></a>\nfor details on how you can customize or completely replace upload behavior.</p>\n<section id=\"where-uploaded-data-is-stored\">\n<h3>Where uploaded data is stored<a class=\"heading-anchor\" href=\"#where-uploaded-data-is-stored\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Before you save uploaded files, the data needs to be stored somewhere.</p>\n<p>By default, if an uploaded file is smaller than 2.5 megabytes, Django will hold\nthe entire contents of the upload in memory. This means that saving the file\ninvolves only a read from memory and a write to disk and thus is very fast.</p>\n<p>However, if an uploaded file is too large, Django will write the uploaded file\nto a temporary file stored in your system’s temporary directory. On a Unix-like\nplatform this means you can expect Django to generate a file called something\nlike <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp/tmpzfp6I6.upload</span></code>. If an upload is large enough, you can watch\nthis file grow in size as Django streams the data onto disk.</p>\n<p>These specifics – 2.5 megabytes; <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp</span></code>; etc. – are «reasonable defaults»\nwhich can be customized as described in the next section.</p>\n</section>\n<section id=\"changing-upload-handler-behavior\">\n<h3>Changing upload handler behavior<a class=\"heading-anchor\" href=\"#changing-upload-handler-behavior\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>There are a few settings which control Django’s file upload behavior. See\n<a class=\"reference internal\" href=\"/it/6.0/ref/settings/#file-upload-settings\"><span class=\"std std-ref\">File Upload Settings</span></a> for details.</p>\n</section>\n<section id=\"modifying-upload-handlers-on-the-fly\">\n<span id=\"id2\"></span><h3>Modifying upload handlers on the fly<a class=\"heading-anchor\" href=\"#modifying-upload-handlers-on-the-fly\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Sometimes particular views require different upload behavior. In these cases,\nyou can override upload handlers on a per-request basis by modifying\n<code class=\"docutils literal notranslate\"><span class=\"pre\">request.upload_handlers</span></code>. By default, this list will contain the upload\nhandlers given by <a class=\"reference internal\" href=\"/it/6.0/ref/settings/#std-setting-FILE_UPLOAD_HANDLERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FILE_UPLOAD_HANDLERS</span></code></a>, but you can modify the list\nas you would any other list.</p>\n<p>For instance, suppose you’ve written a <code class=\"docutils literal notranslate\"><span class=\"pre\">ProgressBarUploadHandler</span></code> that\nprovides feedback on upload progress to some sort of AJAX widget. You’d add\nthis handler to your upload handlers like this:</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=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">upload_handlers</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ProgressBarUploadHandler</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Using <code class=\"docutils literal notranslate\"><span class=\"pre\">list.insert()</span></code>, as shown above, ensures that the progress bar handler\nis placed at the beginning of the list. Since upload handlers are executed in\norder, this placement guarantees that the progress bar handler runs before the\ndefault handlers, allowing it to track progress across the entire upload.</p>\n<p>If you want to replace the upload handlers completely, you can assign a new\nlist:</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=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">upload_handlers</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"n\">ProgressBarUploadHandler</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)]</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Nota</p>\n<p>You can only modify upload handlers <em>before</em> accessing\n<code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> – it doesn’t make sense to\nchange upload handlers after upload handling has already\nstarted. If you try to modify <code class=\"docutils literal notranslate\"><span class=\"pre\">request.upload_handlers</span></code> after\nreading from <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> Django will\nthrow an error.</p>\n<p>Thus, you should always modify uploading handlers as early in your view as\npossible.</p>\n<p>Also, <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> is accessed by\n<a class=\"reference internal\" href=\"/it/6.0/ref/middleware/#django.middleware.csrf.CsrfViewMiddleware\" title=\"django.middleware.csrf.CsrfViewMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code></a> which is enabled by\ndefault. This means you will need to use\n<a class=\"reference internal\" href=\"/it/6.0/ref/csrf/#django.views.decorators.csrf.csrf_exempt\" title=\"django.views.decorators.csrf.csrf_exempt\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">csrf_exempt()</span></code></a> on your view to allow you\nto change the upload handlers. You will then need to use\n<a class=\"reference internal\" href=\"/it/6.0/ref/csrf/#django.views.decorators.csrf.csrf_protect\" title=\"django.views.decorators.csrf.csrf_protect\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">csrf_protect()</span></code></a> on the function that\nactually processes the request. Note that this means that the handlers may\nstart receiving the file upload before the CSRF checks have been done.\nExample code:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.csrf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">csrf_exempt</span><span class=\"p\">,</span> <span class=\"n\">csrf_protect</span>\n\n\n<span class=\"nd\">@csrf_exempt</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">upload_file_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">upload_handlers</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ProgressBarUploadHandler</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">_upload_file_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@csrf_protect</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">_upload_file_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Process request</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>If you are using a class-based view, you will need to use\n<a class=\"reference internal\" href=\"/it/6.0/ref/csrf/#django.views.decorators.csrf.csrf_exempt\" title=\"django.views.decorators.csrf.csrf_exempt\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">csrf_exempt()</span></code></a> on its\n<a class=\"reference internal\" href=\"/it/6.0/ref/class-based-views/base/#django.views.generic.base.View.dispatch\" title=\"django.views.generic.base.View.dispatch\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">dispatch()</span></code></a> method and\n<a class=\"reference internal\" href=\"/it/6.0/ref/csrf/#django.views.decorators.csrf.csrf_protect\" title=\"django.views.decorators.csrf.csrf_protect\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">csrf_protect()</span></code></a> on the method that\nactually processes the request. Example code:</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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.decorators</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">View</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.csrf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">csrf_exempt</span><span class=\"p\">,</span> <span class=\"n\">csrf_protect</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">csrf_exempt</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;dispatch&quot;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">UploadFileView</span><span class=\"p\">(</span><span class=\"n\">View</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">upload_handlers</span><span class=\"o\">.</span><span class=\"n\">insert</span><span class=\"p\">(</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"n\">ProgressBarUploadHandler</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">))</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">setup</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">csrf_protect</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">post</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Process request</span>\n        <span class=\"o\">...</span>\n</code></pre></div>\n</aside>\n</section>\n</section>","rootId":"file-uploads","toc":[{"title":"Basic file uploads","anchor":"basic-file-uploads","children":[{"title":"Handling uploaded files with a model","anchor":"handling-uploaded-files-with-a-model","children":[]},{"title":"Uploading multiple files","anchor":"uploading-multiple-files","children":[]}]},{"title":"Upload Handlers","anchor":"upload-handlers","children":[{"title":"Where uploaded data is stored","anchor":"where-uploaded-data-is-stored","children":[]},{"title":"Changing upload handler behavior","anchor":"changing-upload-handler-behavior","children":[]},{"title":"Modifying upload handlers on the fly","anchor":"modifying-upload-handlers-on-the-fly","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/it/6.0/topics/"},{"docname":"topics/http/index","title":"Handling HTTP requests","url":"/it/6.0/topics/http/"}],"prev":{"docname":"topics/http/decorators","title":"View decorators","url":"/it/6.0/topics/http/decorators/"},"next":{"docname":"topics/http/shortcuts","title":"Django shortcut functions","url":"/it/6.0/topics/http/shortcuts/"},"formats":{"html":"/it/6.0/topics/http/file-uploads/","markdown":"/it/6.0/topics/http/file-uploads.md","json":"/it/6.0/topics/http/file-uploads.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/topics/http/file-uploads.txt","official":"https://docs.djangoproject.com/it/6.0/topics/http/file-uploads/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}