{"title":"Filuppladdning","version":"6.1","locale":"sv","docname":"topics/http/file-uploads","url":"/sv/6.1/topics/http/file-uploads/","canonical":"https://djangodocs.dev/sv/6.1/topics/http/file-uploads/","summary":"När Django hanterar en filuppladdning placeras filinformationen i request.FILES (för mer information om objektet request se dokumentationen för request and response…","html":"<h1>Filuppladdning<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>När Django hanterar en filuppladdning placeras filinformationen i <a class=\"reference internal\" href=\"/sv/6.1/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> (för mer information om objektet <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> se dokumentationen för <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/\"><span class=\"doc\">request and response objects</span></a>). I det här dokumentet förklaras hur filer lagras på disk och i minne och hur du anpassar standardbeteendet.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>Det finns säkerhetsrisker om du accepterar uppladdat innehåll från icke betrodda användare! Se säkerhetsguidens ämne om <a class=\"reference internal\" href=\"/sv/6.1/topics/security/#user-uploaded-content-security\"><span class=\"std std-ref\">Innehåll som laddats upp av användare</span></a> för mer information om begränsning.</p>\n</aside>\n<section id=\"basic-file-uploads\">\n<h2>Grundläggande filuppladdningar<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>Tänk dig ett formulär som innehåller en <a class=\"reference internal\" href=\"/sv/6.1/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>En vy som hanterar detta formulär kommer att få filinformationen i <a class=\"reference internal\" href=\"/sv/6.1/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>, som är en ordbok som innehåller en nyckel för varje <a class=\"reference internal\" href=\"/sv/6.1/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> (eller <a class=\"reference internal\" href=\"/sv/6.1/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>, eller annan <a class=\"reference internal\" href=\"/sv/6.1/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> subklass) i formuläret. Så data från ovanstående formulär skulle vara tillgängliga som <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES['file']</span></code>.</p>\n<p>Observera att <code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">request.FILES</span> <span class=\"pre\">&lt;django.http.HttpRequest.FILES&gt;`</span></code> endast kommer att innehålla data om förfrågningsmetoden var <code class=\"docutils literal notranslate\"><span class=\"pre\">POST</span></code>, minst ett filfält faktiskt postades och <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;form&gt;</span></code> som postade förfrågan har attributet <code class=\"docutils literal notranslate\"><span class=\"pre\">enctype=&quot;multipart/form-data&quot;</span></code>. Annars kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> att vara tomt.</p>\n<p>För det mesta kommer du att skicka filinformationen från <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> till formuläret enligt beskrivningen i <a class=\"reference internal\" href=\"/sv/6.1/ref/forms/api/#binding-uploaded-files\"><span class=\"std std-ref\">Binder uppladdade filer till ett formulär</span></a>. Detta skulle se ut ungefär som:</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\">Vyer.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>Observera att vi måste skicka <a class=\"reference internal\" href=\"/sv/6.1/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> till formulärets konstruktör; det är så här fildata binds till ett formulär.</p>\n<p>Här är ett vanligt sätt att hantera en uppladdad fil:</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>Genom att loopa över <code class=\"docutils literal notranslate\"><span class=\"pre\">UploadedFile.chunks()</span></code> istället för att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">read()</span></code> säkerställs att stora filer inte överbelastar systemets minne.</p>\n<p>Det finns några andra metoder och attribut som är tillgängliga för <code class=\"docutils literal notranslate\"><span class=\"pre\">UploadedFile</span></code>-objekt; se <a class=\"reference internal\" href=\"/sv/6.1/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> för en fullständig referens.</p>\n<section id=\"handling-uploaded-files-with-a-model\">\n<h3>Hantera uppladdade filer med en modell<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>Om du sparar en fil på en <a class=\"reference internal\" href=\"/sv/6.1/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> med en <a class=\"reference internal\" href=\"/sv/6.1/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>, kan du använda en <a class=\"reference internal\" href=\"/sv/6.1/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> som gör processen mycket enklare. Filobjektet kommer att sparas på den plats som anges av <a class=\"reference internal\" href=\"/sv/6.1/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>-argumentet för motsvarande <a class=\"reference internal\" href=\"/sv/6.1/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> när du anropar <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>Om du konstruerar ett objekt manuellt kan du tilldela filobjektet från <a class=\"reference internal\" href=\"/sv/6.1/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> till filfältet i modellen:</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>Om du konstruerar ett objekt manuellt utanför en begäran kan du tilldela ett <a class=\"reference internal\" href=\"/sv/6.1/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> liknande objekt till <a class=\"reference internal\" href=\"/sv/6.1/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>Ladda upp flera filer<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>Om du vill ladda upp flera filer med ett formulärfält skapar du en underklass av fältets widget och ställer in klassattributet <code class=\"docutils literal notranslate\"><span class=\"pre\">allow_multiple_selected</span></code> på <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>För att alla sådana filer ska kunna valideras av ditt formulär (och fältets värde ska inkludera dem alla) måste du också underklassa <code class=\"docutils literal notranslate\"><span class=\"pre\">FileField</span></code>. Se nedan för ett exempel.</p>\n<aside class=\"admonition-multiple-file-field admonition\">\n<p class=\"admonition-title\">Fält för flera filer</p>\n<p>Django kommer sannolikt att ha ett ordentligt stöd för flera filfält någon gång i framtiden.</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>Åsidosätt sedan metoden <code class=\"docutils literal notranslate\"><span class=\"pre\">form_valid()</span></code> i din <a class=\"reference internal\" href=\"/sv/6.1/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>-underklass för att hantera flera filuppladdningar:</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\">Vyer.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\">Varning</p>\n<p>Detta gör att du kan hantera flera filer endast på formulärnivå. Tänk på att du inte kan använda den för att lägga till flera filer på en enda modellinstans (i ett enda fält), till exempel även om den anpassade widgeten används med ett formulärfält som är relaterat till en modell <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>Uppladdningshanterare<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>När en användare laddar upp en fil skickar Django filinformationen till en <em>uppladdningshanterare</em> - en liten klass som hanterar filinformationen när den laddas upp. Uppladdningshanterare definieras initialt i inställningen <a class=\"reference internal\" href=\"/sv/6.1/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>, som har standardvärdet:</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>Tillsammans tillhandahåller <a class=\"reference internal\" href=\"/sv/6.1/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> och <a class=\"reference internal\" href=\"/sv/6.1/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> Djangos standardbeteende för filuppladdning genom att läsa små filer i minnet och stora filer på disken.</p>\n<p>Du kan skriva egna handlers som anpassar hur Django hanterar filer. Du kan till exempel använda anpassade hanterare för att genomdriva kvoter på användarnivå, komprimera data i farten, rendera förloppsbalkar och till och med skicka data till en annan lagringsplats direkt utan att lagra dem lokalt. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/files/uploads/#custom-upload-handlers\"><span class=\"std std-ref\">Skriva anpassade uppladdningshanterare</span></a> för detaljer om hur du kan anpassa eller helt ersätta uppladdningsbeteendet.</p>\n<section id=\"where-uploaded-data-is-stored\">\n<h3>Var uppladdade data lagras<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>Innan du sparar uppladdade filer måste data lagras någonstans.</p>\n<p>Som standard, om en uppladdad fil är mindre än 2,5 megabyte, kommer Django att hålla hela innehållet i uppladdningen i minnet. Det innebär att när filen sparas sker endast en läsning från minnet och en skrivning till disken och det går därför mycket snabbt.</p>\n<p>Men om en uppladdad fil är för stor kommer Django att skriva den uppladdade filen till en temporär fil som lagras i ditt systems temporära katalog. På en Unix-liknande plattform betyder det att du kan förvänta dig att Django genererar en fil som heter något i stil med <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp/tmpzfp6I6.upload</span></code>. Om en uppladdning är tillräckligt stor kan du se den här filen växa i storlek när Django strömmar data till disken.</p>\n<p>Dessa specifikationer – 2,5 megabyte; <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp</span></code>; etc. – är ”rimliga standardvärden” som kan anpassas enligt beskrivningen i nästa avsnitt.</p>\n</section>\n<section id=\"changing-upload-handler-behavior\">\n<h3>Ändra beteende för uppladdningshanterare<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>Det finns några inställningar som styr Djangos filuppladdningsbeteende. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#file-upload-settings\"><span class=\"std std-ref\">Filuppladdningsinställningar</span></a> för detaljer.</p>\n</section>\n<section id=\"modifying-upload-handlers-on-the-fly\">\n<span id=\"id2\"></span><h3>Ändra uppladdningshanterare i farten<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>Ibland kräver särskilda vyer olika uppladdningsbeteende. I dessa fall kan du åsidosätta uppladdningshanterare per begäran genom att ändra <code class=\"docutils literal notranslate\"><span class=\"pre\">request.upload_handlers</span></code>. Som standard innehåller den här listan de uppladdningshanterare som anges av <a class=\"reference internal\" href=\"/sv/6.1/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>, men du kan ändra listan som du skulle göra med vilken annan lista som helst.</p>\n<p>Anta till exempel att du har skrivit en <code class=\"docutils literal notranslate\"><span class=\"pre\">ProgressBarUploadHandler</span></code> som ger feedback om uppladdningsförloppet till någon form av AJAX-widget. Du skulle lägga till den här hanteraren till dina uppladdningshanterare så här:</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>Genom att använda <code class=\"docutils literal notranslate\"><span class=\"pre\">list.insert()</span></code>, som visas ovan, säkerställs att förloppsindikatorn placeras i början av listan. Eftersom uppladdningshanterare exekveras i ordning garanterar denna placering att förloppsindikatorn körs före standardhanterarna, vilket gör att den kan spåra förloppet under hela uppladdningen.</p>\n<p>Om du vill ersätta uppladdningshanterarna helt och hållet kan du tilldela en ny lista:</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\">Observera</p>\n<p>Du kan bara ändra uppladdningshanterare <em>före</em> åtkomst till <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> - det är inte meningsfullt att ändra uppladdningshanterare efter att uppladdningshanteringen redan har börjat. Om du försöker ändra <code class=\"docutils literal notranslate\"><span class=\"pre\">request.upload_handlers</span></code> efter att ha läst från <code class=\"docutils literal notranslate\"><span class=\"pre\">request.POST</span></code> eller <code class=\"docutils literal notranslate\"><span class=\"pre\">request.FILES</span></code> kommer Django att ge ett felmeddelande.</p>\n<p>Därför bör du alltid modifiera uppladdningshanterare så tidigt som möjligt i din vy.</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=\"/sv/6.1/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=\"/sv/6.1/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=\"/sv/6.1/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>Om du använder en klassbaserad vy måste du använda <a class=\"reference internal\" href=\"/sv/6.1/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> på dess <a class=\"reference internal\" href=\"/sv/6.1/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> metod och <a class=\"reference internal\" href=\"/sv/6.1/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> på den metod som faktiskt behandlar förfrågan. Exempel på kod:</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":"Grundläggande filuppladdningar","anchor":"basic-file-uploads","children":[{"title":"Hantera uppladdade filer med en modell","anchor":"handling-uploaded-files-with-a-model","children":[]},{"title":"Ladda upp flera filer","anchor":"uploading-multiple-files","children":[]}]},{"title":"Uppladdningshanterare","anchor":"upload-handlers","children":[{"title":"Var uppladdade data lagras","anchor":"where-uploaded-data-is-stored","children":[]},{"title":"Ändra beteende för uppladdningshanterare","anchor":"changing-upload-handler-behavior","children":[]},{"title":"Ändra uppladdningshanterare i farten","anchor":"modifying-upload-handlers-on-the-fly","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"},{"docname":"topics/http/index","title":"Hantering av HTTP-förfrågningar","url":"/sv/6.1/topics/http/"}],"prev":{"docname":"topics/http/decorators","title":"Visa dekoratörer","url":"/sv/6.1/topics/http/decorators/"},"next":{"docname":"topics/http/shortcuts","title":"Django genvägsfunktioner","url":"/sv/6.1/topics/http/shortcuts/"},"formats":{"html":"/sv/6.1/topics/http/file-uploads/","markdown":"/sv/6.1/topics/http/file-uploads.md","json":"/sv/6.1/topics/http/file-uploads.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/http/file-uploads.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/http/file-uploads/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}