{"title":"Hantera filer","version":"6.1","locale":"sv","docname":"topics/files","url":"/sv/6.1/topics/files/","canonical":"https://djangodocs.dev/sv/6.1/topics/files/","summary":"Detta dokument beskriver Djangos API:er för filåtkomst för filer som till exempel de som laddas upp av en användare. API:erna på lägre nivå är tillräckligt…","html":"<h1>Hantera filer<a class=\"heading-anchor\" href=\"#managing-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument beskriver Djangos API:er för filåtkomst för filer som till exempel de som laddas upp av en användare. API:erna på lägre nivå är tillräckligt generella för att du ska kunna använda dem för andra ändamål. Om du vill hantera ”statiska filer” (JS, CSS, etc.), se <a class=\"reference internal\" href=\"/sv/6.1/howto/static-files/\"><span class=\"doc\">Hur man hanterar statiska filer (t.ex. bilder, JavaScript, CSS)</span></a>.</p>\n<p>Som standard lagrar Django filer lokalt med hjälp av inställningarna <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a>. Exemplen nedan förutsätter att du använder dessa standardinställningar.</p>\n<p>Django tillhandahåller dock sätt att skriva anpassade ”fillagringssystem” som gör att du helt kan anpassa var och hur Django lagrar filer. I andra halvan av detta dokument beskrivs hur dessa lagringssystem fungerar.</p>\n<section id=\"using-files-in-models\">\n<h2>Använda filer i modeller<a class=\"heading-anchor\" href=\"#using-files-in-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>När du använder 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> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> tillhandahåller Django en uppsättning API:er som du kan använda för att hantera den filen.</p>\n<p>Tänk på följande modell, som använder en <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> för att lagra ett foto:</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.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Car</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</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\">255</span><span class=\"p\">)</span>\n    <span class=\"n\">price</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DecimalField</span><span class=\"p\">(</span><span class=\"n\">max_digits</span><span class=\"o\">=</span><span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"n\">decimal_places</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">photo</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ImageField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s2\">&quot;cars&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">specs</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s2\">&quot;specs&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Varje <code class=\"docutils literal notranslate\"><span class=\"pre\">Car</span></code>-instans har ett <code class=\"docutils literal notranslate\"><span class=\"pre\">photo</span></code>-attribut som du kan använda för att få fram detaljerna i det bifogade fotot:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span> <span class=\"o\">=</span> <span class=\"n\">Car</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span>\n<span class=\"go\">&lt;ImageFieldFile: cars/chevy.jpg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">name</span>\n<span class=\"go\">&#39;cars/chevy.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">path</span>\n<span class=\"go\">&#39;/media/cars/chevy.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">url</span>\n<span class=\"go\">&#39;https://media.example.com/cars/chevy.jpg&#39;</span>\n</code></pre></div>\n<p>Detta objekt - <code class=\"docutils literal notranslate\"><span class=\"pre\">car.photo</span></code> i exemplet - är ett <code class=\"docutils literal notranslate\"><span class=\"pre\">File</span></code>-objekt, vilket innebär att det har alla de metoder och attribut som beskrivs nedan.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Filen sparas som en del av att modellen sparas i databasen, så det faktiska filnamnet som används på disken kan man inte lita på förrän efter att modellen har sparats.</p>\n</aside>\n<p>Du kan till exempel ändra filnamnet genom att ställa in filens <a class=\"reference internal\" href=\"/sv/6.1/ref/files/file/#django.core.files.File.name\" title=\"django.core.files.File.name\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">name</span></code></a> till en sökväg i förhållande till fillagringsplatsen (<a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a> om du använder standard <a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/#django.core.files.storage.FileSystemStorage\" title=\"django.core.files.storage.FileSystemStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileSystemStorage</span></code></a>):</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">initial_path</span> <span class=\"o\">=</span> <span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">path</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;cars/chevy_ii.jpg&quot;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">new_path</span> <span class=\"o\">=</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span><span class=\"p\">,</span> <span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># Move the file on the filesystem</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">(</span><span class=\"n\">initial_path</span><span class=\"p\">,</span> <span class=\"n\">new_path</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">path</span>\n<span class=\"go\">&#39;/media/cars/chevy_ii.jpg&#39;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">==</span> <span class=\"n\">new_path</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Så här sparar du en befintlig fil på disken till 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>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pathlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Path</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">File</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"s2\">&quot;/some/external/specs.pdf&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span> <span class=\"o\">=</span> <span class=\"n\">Car</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">mode</span><span class=\"o\">=</span><span class=\"s2\">&quot;rb&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">specs</span> <span class=\"o\">=</span> <span class=\"n\">File</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"gp\">...</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Medan <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a> icke-bilddataattribut, såsom <code class=\"docutils literal notranslate\"><span class=\"pre\">höjd</span></code>, <code class=\"docutils literal notranslate\"><span class=\"pre\">bredd</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">storlek</span></code> är tillgängliga på instansen, kan de underliggande bilddata inte användas utan att öppna bilden igen. Exempel på detta:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">PIL</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Image</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span> <span class=\"o\">=</span> <span class=\"n\">Car</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s2\">&quot;57 Chevy&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">width</span>\n<span class=\"go\">191</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">height</span>\n<span class=\"go\">287</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">image</span> <span class=\"o\">=</span> <span class=\"n\">Image</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"p\">)</span>\n<span class=\"go\"># Raises ValueError: seek of closed file.</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span>\n<span class=\"go\">&lt;ImageFieldFile: cars/chevy.jpg&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">image</span> <span class=\"o\">=</span> <span class=\"n\">Image</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">car</span><span class=\"o\">.</span><span class=\"n\">photo</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">image</span>\n<span class=\"go\">&lt;PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=191x287 at 0x7F99A94E9048&gt;</span>\n</code></pre></div>\n</aside>\n</section>\n<section id=\"the-file-object\">\n<h2>Objektet ”Fil<a class=\"heading-anchor\" href=\"#the-file-object\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Internt använder Django en <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\">django.core.files.File</span></code></a>-instans varje gång den behöver representera en fil.</p>\n<p>För det mesta använder du en <code class=\"docutils literal notranslate\"><span class=\"pre\">Fil</span></code> som Django har gett dig (dvs. en fil som är kopplad till en modell enligt ovan, eller kanske en uppladdad fil).</p>\n<p>Om du behöver konstruera en <code class=\"docutils literal notranslate\"><span class=\"pre\">File</span></code> själv är det enklaste sättet att skapa en med hjälp av ett Python-inbyggt <code class=\"docutils literal notranslate\"><span class=\"pre\">file</span></code>-objekt:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">File</span>\n\n<span class=\"go\"># Create a Python file object using open()</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/hello.world&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">myfile</span> <span class=\"o\">=</span> <span class=\"n\">File</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Nu kan du använda alla dokumenterade attribut och metoder i <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>-klassen.</p>\n<p>Tänk på att filer som skapas på detta sätt inte stängs automatiskt. Följande metod kan användas för att stänga filer automatiskt:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">File</span>\n\n<span class=\"go\"># Create a Python file object using open() and the with statement</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">with</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"s2\">&quot;/path/to/hello.world&quot;</span><span class=\"p\">,</span> <span class=\"s2\">&quot;w&quot;</span><span class=\"p\">)</span> <span class=\"k\">as</span> <span class=\"n\">f</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"n\">myfile</span> <span class=\"o\">=</span> <span class=\"n\">File</span><span class=\"p\">(</span><span class=\"n\">f</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span>    <span class=\"n\">myfile</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello World&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">myfile</span><span class=\"o\">.</span><span class=\"n\">closed</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">closed</span>\n<span class=\"go\">True</span>\n</code></pre></div>\n<p>Att stänga filer är särskilt viktigt när man använder filfält i en loop över ett stort antal objekt. Om filer inte stängs manuellt efter åtkomst kan det uppstå risk för att filbeskrivare tar slut. Detta kan leda till följande fel:</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">OSError: [Errno 24] Too many open files</span>\n</code></pre></div>\n</section>\n<section id=\"file-storage\">\n<h2>Lagring av filer<a class=\"heading-anchor\" href=\"#file-storage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Bakom kulisserna delegerar Django beslut om hur och var filer ska lagras till ett fillagringssystem. Detta är det objekt som faktiskt förstår saker som filsystem, öppning och läsning av filer etc.</p>\n<p>Djangos standard fillagring är <code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code><a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/#django.core.files.storage.FileSystemStorage\" title=\"django.core.files.storage.FileSystemStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.core.files.storage.FileSystemStorage</span></code></a><code class=\"docutils literal notranslate\"><span class=\"pre\">'</span></code>. Om du inte uttryckligen anger ett lagringssystem i <code class=\"docutils literal notranslate\"><span class=\"pre\">default</span></code>-nyckeln i inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a>, är det detta som kommer att användas.</p>\n<p>Se nedan för mer information om det inbyggda standard fillagringssystemet, och se <a class=\"reference internal\" href=\"/sv/6.1/howto/custom-file-storage/\"><span class=\"doc\">Så här skriver du en anpassad lagringsklass</span></a> för information om hur du skriver ditt eget fillagringssystem.</p>\n<section id=\"storage-objects\">\n<h3>Förvaringsobjekt<a class=\"heading-anchor\" href=\"#storage-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Även om du för det mesta vill använda ett <code class=\"docutils literal notranslate\"><span class=\"pre\">File</span></code>-objekt (som delegerar till rätt lagring för filen) kan du använda fillagringssystem direkt. Du kan skapa en instans av någon anpassad fillagringsklass, eller - ofta mer användbart - du kan använda det globala standardlagringssystemet:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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 console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><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<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files.storage</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">default_storage</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">default_storage</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"s2\">&quot;path/to/file&quot;</span><span class=\"p\">,</span> <span class=\"n\">ContentFile</span><span class=\"p\">(</span><span class=\"sa\">b</span><span class=\"s2\">&quot;new content&quot;</span><span class=\"p\">))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">path</span>\n<span class=\"go\">&#39;path/to/file&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">default_storage</span><span class=\"o\">.</span><span class=\"n\">size</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n<span class=\"go\">11</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">default_storage</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">()</span>\n<span class=\"go\">b&#39;new content&#39;</span>\n\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">default_storage</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">default_storage</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">)</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n<p>Se <a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/\"><span class=\"doc\">API för fillagring</span></a> för API:et för fillagring.</p>\n</section>\n<section id=\"the-built-in-filesystem-storage-class\">\n<span id=\"builtin-fs-storage\"></span><h3>Den inbyggda lagringsklassen för filsystem<a class=\"heading-anchor\" href=\"#the-built-in-filesystem-storage-class\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django levereras med en <a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/#django.core.files.storage.FileSystemStorage\" title=\"django.core.files.storage.FileSystemStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.core.files.storage.FileSystemStorage</span></code></a>-klass som implementerar grundläggande lokal filsystemlagring.</p>\n<p>Till exempel kommer följande kod att lagra uppladdade filer under <code class=\"docutils literal notranslate\"><span class=\"pre\">/media/photos</span></code> oavsett vad din <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MEDIA_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_ROOT</span></code></a>-inställning ä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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.core.files.storage</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">FileSystemStorage</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"n\">fs</span> <span class=\"o\">=</span> <span class=\"n\">FileSystemStorage</span><span class=\"p\">(</span><span class=\"n\">location</span><span class=\"o\">=</span><span class=\"s2\">&quot;/media/photos&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Car</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"o\">...</span>\n    <span class=\"n\">photo</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ImageField</span><span class=\"p\">(</span><span class=\"n\">storage</span><span class=\"o\">=</span><span class=\"n\">fs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/sv/6.1/howto/custom-file-storage/\"><span class=\"doc\">Custom storage systems</span></a> fungerar på samma sätt: du kan skicka in dem som argumentet <code class=\"docutils literal notranslate\"><span class=\"pre\">storage</span></code> till 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>.</p>\n</section>\n<section id=\"using-a-callable\">\n<h3>Använda en callable<a class=\"heading-anchor\" href=\"#using-a-callable\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Du kan använda en callable som <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.FileField.storage\" title=\"django.db.models.FileField.storage\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">storage</span></code></a> parameter för <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> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ImageField</span></code></a>. Detta gör att du kan ändra den använda lagringen vid körning, till exempel välja olika lagring för olika miljöer.</p>\n<p>Your callable will be evaluated when your model classes are loaded, and must\nreturn an instance of <a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/#django.core.files.storage.Storage\" title=\"django.core.files.storage.Storage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Storage</span></code></a>.</p>\n<p>Till exempel:</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.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.storages</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">MyLocalStorage</span><span class=\"p\">,</span> <span class=\"n\">MyRemoteStorage</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">select_storage</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"n\">MyLocalStorage</span><span class=\"p\">()</span> <span class=\"k\">if</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span> <span class=\"k\">else</span> <span class=\"n\">MyRemoteStorage</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">my_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">storage</span><span class=\"o\">=</span><span class=\"n\">select_storage</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>För att ställa in en lagring som definieras i inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> kan du använda <a class=\"reference internal\" href=\"/sv/6.1/ref/files/storage/#django.core.files.storage.storages\" title=\"django.core.files.storage.storages\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">storages</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.files.storage</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">storages</span>\n\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">select_storage</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"n\">storages</span><span class=\"p\">[</span><span class=\"s2\">&quot;mystorage&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">upload</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">storage</span><span class=\"o\">=</span><span class=\"n\">select_storage</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Because the callable is evaluated when your model classes are loaded, if you\nneed to override the <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> setting in tests, you should use a\n<code class=\"docutils literal notranslate\"><span class=\"pre\">LazyObject</span></code> subclass instead:</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.files.storage</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">storages</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.utils.functional</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LazyObject</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">OtherStorage</span><span class=\"p\">(</span><span class=\"n\">LazyObject</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>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"n\">storages</span><span class=\"p\">[</span><span class=\"s2\">&quot;mystorage&quot;</span><span class=\"p\">]</span>\n\n\n<span class=\"n\">my_storage</span> <span class=\"o\">=</span> <span class=\"n\">OtherStorage</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyModel</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">upload</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">storage</span><span class=\"o\">=</span><span class=\"n\">my_storage</span><span class=\"p\">)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">LazyObject</span></code> fördröjer utvärderingen av lagringen tills den faktiskt behövs, vilket gör att <a class=\"reference internal\" href=\"/sv/6.1/topics/testing/tools/#django.test.override_settings\" title=\"django.test.override_settings\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">override_settings()</span></code></a> kan träda i kraft:</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=\"nd\">@override_settings</span><span class=\"p\">(</span>\n    <span class=\"n\">STORAGES</span><span class=\"o\">=</span><span class=\"p\">{</span>\n        <span class=\"s2\">&quot;mystorage&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n            <span class=\"s2\">&quot;BACKEND&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.core.files.storage.InMemoryStorage&quot;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"p\">}</span>\n<span class=\"p\">)</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">test_storage</span><span class=\"p\">():</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">MyModel</span><span class=\"p\">()</span>\n    <span class=\"k\">assert</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">upload</span><span class=\"o\">.</span><span class=\"n\">storage</span><span class=\"p\">,</span> <span class=\"n\">InMemoryStorage</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n</section>","rootId":"managing-files","toc":[{"title":"Använda filer i modeller","anchor":"using-files-in-models","children":[]},{"title":"Objektet ”Fil","anchor":"the-file-object","children":[]},{"title":"Lagring av filer","anchor":"file-storage","children":[{"title":"Förvaringsobjekt","anchor":"storage-objects","children":[]},{"title":"Den inbyggda lagringsklassen för filsystem","anchor":"the-built-in-filesystem-storage-class","children":[]},{"title":"Använda en callable","anchor":"using-a-callable","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"}],"prev":{"docname":"topics/migrations","title":"Migreringar","url":"/sv/6.1/topics/migrations/"},"next":{"docname":"topics/testing/index","title":"Testning i Django","url":"/sv/6.1/topics/testing/"},"formats":{"html":"/sv/6.1/topics/files/","markdown":"/sv/6.1/topics/files.md","json":"/sv/6.1/topics/files.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/files.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/files/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}