{"title":"Uaslódálacha Comhad","version":"6.0","locale":"ga","docname":"topics/http/file-uploads","url":"/ga/6.0/topics/http/file-uploads/","canonical":"https://djangodocs.dev/ga/6.0/topics/http/file-uploads/","summary":"Nuair a láimhseálann Django uaslódáil comhad, críochnaíonn sonraí </ref/request-response> <django.http.HttpRequest.FILES>na gcomhad cuirtear in:attr: `…","html":"<h1>Uaslódálacha Comhad<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>Nuair a láimhseálann Django uaslódáil comhad, críochnaíonn sonraí &lt;/ref/request-response&gt; &lt;django.http.HttpRequest.FILES&gt;na gcomhad cuirtear in:attr: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>request.files <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>(le haghaidh tuilleadh eolais ar an réad <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>iarraidh <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">``</span></a>féach an doiciméadú le haghaidh: doc: <a href=\"#id9\"><span class=\"problematic\" id=\"id10\">`</span></a>earraí iarratais agus freagartha'). Míníonn an doiciméad seo conas a stóráiltear comhaid ar dhiosca agus i gcuimhne, agus conas an t-iompar réamhshocraithe a shain</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>Tá rioscaí slándála ann má tá tú ag glacadh le hábhar uaslódáilte ó úsáideoirí neam Féach ábhar an treoir slándála ar:ref: user-uploaded-content-security le haghaidh sonraí maolaithe.</p>\n</aside>\n<section id=\"basic-file-uploads\">\n<h2>Uaslódálacha comhaid bunúsacha<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>Smaoinigh ar fhoirm ina bhfuil a:class: ~django.forms.filefield:</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\">foirme.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>Gheobhaidh amharc ag láimhseáil an fhoirm seo na sonraí comhad in:attr: Request.File`&lt;django.http.HttpRequest.FILES&gt;, ar foclóir é ina bhfuil eochair do gach ceach:class: `~django.forms.filefield (nó:class: ~django.forms.imagefield nó eile:class: ~django.forms.filefield) sa fhoirm. Mar sin bheadh na sonraí ón bhfoirm thuas inrochtana mar <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>request.files ['file'] <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>&lt;form&gt;Tabhair faoi deara nach m &lt;django.http.HttpRequest.FILES&gt;beidh sonraí: attr: Request.files `ach mura raibh an modh iarratais ``POST `, cuireadh réimse comhad amháin ar a laghad a phostáil i ndáiríre, agus tá an tréith <code class=\"docutils literal notranslate\"><span class=\"pre\">enctype=&quot;multipart/form-data&quot;</span></code> ag an`` <code class=\"docutils literal notranslate\"><span class=\"pre\">a</span> <span class=\"pre\">chuir</span> <span class=\"pre\">an</span> <span class=\"pre\">iarraidh.</span> <span class=\"pre\">Seachas</span> <span class=\"pre\">sin,</span> <span class=\"pre\">beidh</span> <span class=\"pre\">``request.files</span></code> folamh.</p>\n<p>An chuid is mó den am, cuirfidh tú na sonraí comhad ó <code class=\"docutils literal notranslate\"><span class=\"pre\">request</span></code> isteach sa fhoirm mar a thuairiscítear in:ref: binding-uploaded-files. Bheadh cuma rud éigin air seo:</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>Tabhair faoi deara go gcaithfimid: attr: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Request.files &lt;django.http.HttpRequest.FILES&gt;`a chur isteach i dtógálaí na foirme; seo mar a chuirtear sonraí comhad ceangailte i bhfoirm.</p>\n<p>Seo bealach coitianta a d'fhéadfá comhad uaslódáilte a láimhseáil:</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>Cinntíonn lupáil thar <code class=\"docutils literal notranslate\"><span class=\"pre\">uploadedfile.chunks</span> <span class=\"pre\">()</span> <span class=\"pre\">``in</span> <span class=\"pre\">ionad</span> <span class=\"pre\">``read</span> <span class=\"pre\">()</span></code> a úsáid nach gcuireann comhaid mhóra cuimhne do chórais a shárú.</p>\n<p>Tá cúpla modh agus tréithe eile ar fáil ar rudaí <code class=\"docutils literal notranslate\"><span class=\"pre\">uploadedfile</span></code>; féach:class: UploadedFile le haghaidh tagartha iomlán.</p>\n<section id=\"handling-uploaded-files-with-a-model\">\n<h3>Comhaid uaslódáilte a láimhseáil<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>Má tá comhad á shábháil agat ar a:class: ~django.db.models.model le a:class: ~django.db.models.filefield, déanann an próiseas seo i bhfad níos éasca ag baint úsáide as a:class: ~django.forms.ModelForm. Sábhálfar réad an chomhaid chuig an suíomh a shonraítear leis an:attr: ~django.db.models.filefield.upload_to argóint an chomhfhreagraí:class: ~django.db.models.filefield nuair a ghlaoch <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>form.save () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></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.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>Má tá réad á thógáil agat de láimh, is féidir leat an réad comhaid a shannadh ó:attr: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>request.files &lt;django.http.HttpRequest.FILES&gt;`chuig an réimse comhaid sa tsamhail:</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>Má tá réad á thógáil agat de láimh lasmuigh d'iarratas, is féidir leat a:class: ~django.core.files.file cosúil le réad a shannadh chuig an:class: ~django.db.models.filefield:</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>Comhad iolracha a uaslódáil<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>Más mian leat comhad iolracha a uaslódáil ag baint úsáide as réimse foirme amháin, cruthaigh fo-aicme de ghuirléid an réimse agus socraigh a tréith aicme allow_multiple_selected go <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p>\n<p>Ionas go mbeidh comhaid den sórt sin go léir a bhailíochtú ag d'fhoirm (agus go mbeidh luach an réimse iad go léir san áireamh), beidh ort fo-aicme “FileField” a dhéanamh freisin. Féach thíos le haghaidh sampla.</p>\n<aside class=\"admonition-multiple-file-field admonition\">\n<p class=\"admonition-title\">Réimse comhad iolrach</p>\n<p>Is dócha go mbeidh tacaíocht cheart réimse comhad iolrach ag Django ag pointe éigin sa todhchaí.</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\">foirme.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>Ansin athraigh an modh <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>form_valid () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>de d':class: ~django.views.generic.edit.formView chun uaslódálacha comhad iolracha a láimhseáil:</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\">Warning</p>\n<p>Ligfidh sé seo duit comhad iolracha a láimhseáil ag leibhéal na foirme amháin. Bí ar an eolas nach féidir leat é a úsáid chun comhad iolracha a chur ar shampla samhail amháin (i réimse amháin), mar shampla, fiú má úsáidtear an giuirléid saincheaptha le réimse foirme a bhaineann le samhail <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>FileField`.</p>\n</aside>\n</section>\n</section>\n<section id=\"upload-handlers\">\n<span id=\"file-upload-handlers\"></span><h2>Uaslódáil 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>Nuair a uaslódálann úsáideoir comhad, cuireann Django sonraí na gcomhad chuig*láimhseálaí uaslódálaí* - rang beag a láimhseálann sonraí comhaid de réir mar a uaslódáltar iad. Sainmhínítear láimhseálaithe uaslódála ar dtús sa socrú:setting: FILE_UPLOAD_HANDLERS, a réamhshocraíonn:</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>Le chéile: Class: MemoryFileUploadHandler agus: class: TemporaryFileUploadHandler soláthraíonn iompar uaslódála comhaid réamhshocraithe Django maidir le comhaid bheaga a léamh isteach i gcuimhne agus cinn mhóra ar an diosca.</p>\n<p>Is féidir leat láimhseálaithe saincheaptha a scríobh a shaincheapann an chaoi a láimhseálann D'fhéadfá, mar shampla, láimhseálaithe saincheaptha a úsáid chun cuótaí ar leibhéal an úsáideora a fhorfheidhmiú, sonraí a chomhbhrú ar an eitilt, barraí dul chun cinn a léiriú, agus fiú sonraí a sheoladh chuig áit stórála eile go díreach gan Féach: ref: custom_upload_handlers le haghaidh sonraí maidir le conas is féidir leat iompar uaslódála a shaincheapadh nó a athsholáthar go hiomlán.</p>\n<section id=\"where-uploaded-data-is-stored\">\n<h3>Nuair a stóráiltear sonraí uaslódá<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>Sula sábhálann tú comhaid uaslódáilte, ní mór na sonraí a stóráil áit éigin.</p>\n<p>De réir réamhshocraithe, má tá comhad uaslódáilte níos lú ná 2.5 meigabyte, coinneoidh Django ábhar iomlán an uaslódála i gcuimhne. Ciallaíonn sé seo nach mbíonn ach léamh ón gcuimhne agus scríobh chuig diosca i gceist leis an gcomhad a shábháil agus dá bhrí sin tá sé an-tapa.</p>\n<p>Mar sin féin, má tá comhad uaslódáilte ró-mhór, scríobhfaidh Django an comhad uaslódáilte chuig comhad sealadach atá stóráilte in eolaire sealadach do chórais. Ar ardán cosúil le Unix ciallaíonn sé seo gur féidir leat a bheith ag súil go nginfidh Django comhad ar a dtugtar rud éigin cosúil le <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmpzfp6i6.upload</span></code>. Má tá uaslódáil mór go leor, is féidir leat féachaint ar an gcomhad seo ag fás i méid de réir mar a shruthlaíonn Django na sonraí ar an diosca.</p>\n<p>Is “réamhshocruithe réasúnacha” iad na sonraíochtaí seo - 2.5 meigabyte; <code class=\"docutils literal notranslate\"><span class=\"pre\">/tmp</span></code>; srl. - is féidir iad a shaincheapadh mar a thuairiscítear sa chéad chuid eile.</p>\n</section>\n<section id=\"changing-upload-handler-behavior\">\n<h3>Iompar láimhseála uaslódála<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>Tá cúpla socrú ann a rialaíonn iompar uaslódála comhad Django. Féach: Ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Socruithe Uaslódála Comhad &lt;file-upload-settings&gt;`le haghaidh sonraí.</p>\n</section>\n<section id=\"modifying-upload-handlers-on-the-fly\">\n<span id=\"id2\"></span><h3>Láimhseálóirí uaslódála a mhodhnú<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>Uaireanta teastaíonn iompar uaslódála éagsúla Sna cásanna seo, is féidir leat láimhseálaithe uaslódála a shárú ar bhonn in aghaidh iarratais trí <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>request.upload_handlers` a mhodhnú. De réir réamhshocraithe, beidh na láimhseálaithe uaslódála a thugtar ar:setting: FILE_UPLOAD_HANDLERS sa liosta seo, ach is féidir leat an liosta a mhodhnú mar a dhéanfá aon liosta eile.</p>\n<p>Mar shampla, cuir i gcás go bhfuil “ProgressbarUploadHandler” scríofa agat a sholáthraíonn aiseolas ar dhul chun cinn a uaslódáil chuig cineál éigin giuirléid AJAX. Chuirfeá an láimhseálaí seo le do láimhseálaithe uaslódála mar seo:</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>Más mian leat na láimhseálaithe uaslódála a chur in ionad go hiomlán, is féidir leat liosta nua a shannadh:</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\">Note</p>\n<p>Ní féidir leat láimhseálaithe uaslódála a mhodhnú ach roimh* roimh rochtain a fháil ar <code class=\"docutils literal notranslate\"><span class=\"pre\">Request.Post</span></code> nó <code class=\"docutils literal notranslate\"><span class=\"pre\">Request.Files</span></code> - níl ciall láimhseálaithe uaslódála a athrú tar éis do láimhseáil uaslódála tosú cheana féin. Má dhéanann tú iarracht <code class=\"docutils literal notranslate\"><span class=\"pre\">request.upload_handlers</span></code> a mhodhnú tar éis léamh ó <code class=\"docutils literal notranslate\"><span class=\"pre\">Request.post</span></code> nó <code class=\"docutils literal notranslate\"><span class=\"pre\">Request.Files</span></code> caithfidh Django earráid.</p>\n<p>Dá bhrí sin, ba cheart duit láimhseálaithe uaslódála a mhodhnú chomh luath i do thuairim agus is féidir.</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=\"/ga/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=\"/ga/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=\"/ga/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>Má tá radharc bunaithe ar rang á úsáid agat, beidh ort: func: ~django.views.decorators.csrf.csrf_exempt a úsáid ara:meth: ~django.views.generic.base.view.dispch modh agus:func: ~django.views.decorators.csrf.csrf_protect ar an modh próiseálann an iarratas i ndáiríre. Cód sampla:</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":"Uaslódálacha comhaid bunúsacha","anchor":"basic-file-uploads","children":[{"title":"Comhaid uaslódáilte a láimhseáil","anchor":"handling-uploaded-files-with-a-model","children":[]},{"title":"Comhad iolracha a uaslódáil","anchor":"uploading-multiple-files","children":[]}]},{"title":"Uaslódáil Handlers","anchor":"upload-handlers","children":[{"title":"Nuair a stóráiltear sonraí uaslódá","anchor":"where-uploaded-data-is-stored","children":[]},{"title":"Iompar láimhseála uaslódála","anchor":"changing-upload-handler-behavior","children":[]},{"title":"Láimhseálóirí uaslódála a mhodhnú","anchor":"modifying-upload-handlers-on-the-fly","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.0/topics/"},{"docname":"topics/http/index","title":"Láimhseáil iarratais HTTP","url":"/ga/6.0/topics/http/"}],"prev":{"docname":"topics/http/decorators","title":"Féach ar mhaisitheoirí","url":"/ga/6.0/topics/http/decorators/"},"next":{"docname":"topics/http/shortcuts","title":"Django shortcut functions","url":"/ga/6.0/topics/http/shortcuts/"},"formats":{"html":"/ga/6.0/topics/http/file-uploads/","markdown":"/ga/6.0/topics/http/file-uploads.md","json":"/ga/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/ga/6.0/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"]}