# Verständnisfrage zu Download-Produkten

**URL:** <https://forum.shopware.com/t/verstaendnisfrage-zu-download-produkten/109882>\
**Category:** Shopware 6 (German)\
**Created:** [10. November 2026 um 07:49 UTC](https://forum.shopware.com/t/verstaendnisfrage-zu-download-produkten/109882 "2026-11-10T07:49:01Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [10. November 2026 um 07:49 UTC](https://forum.shopware.com/t/verstaendnisfrage-zu-download-produkten/109882/1 "2026-11-10T07:49:01Z")

</div>

Jetzt muss ich mal ganz blöd nachfragen, weil ich das nicht verstehe:

Wenn ich im Backend ein Download-Produkt anlege, dann hat dieses das Merkmal ‚private=1‘ und das Downloadfile liegt unter:

> /files/media/fa/d9/2d/1794296205/…

Wenn ich über die API ein Download-Produkt anlege, dann hat dieses das Merkmal ‚private=0‘ und das Downloadfile lieht unter:

> /public/media/3a/f1/ae/1793992416/…

In der API selber wird das Downloadfile so angelegt:

```auto
$ProduktImportData['downloads'][0] = [
 'id' => ClassMigrationCore::GetUUID(),
 'productId' => $MainUUID,
 'mediaId' => $DownloadMediaUUID
];

```

Jetzt stellt sich mir die Frage voher diese Unterschiede kommen und welche Auswirkungen das haben könnte.

---

<div class="post-metadata">

**Author:** ![Julian\_Braeucker](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/julian_braeucker/32/28050_2.png) [@Julian\_Braeucker](https://forum.shopware.com/u/Julian_Braeucker)\
**Post date:** [10. November 2026 um 08:48 UTC](https://forum.shopware.com/t/verstaendnisfrage-zu-download-produkten/109882/2 "2026-11-10T08:48:01Z")

</div>

Der Unterschied kommt vom Feld `private` am Media-Eintrag selbst, nicht vom Ordner. Die Download-Karte im Produkt legt den Media-Eintrag mit `private: true` an, bevor sie die Datei hochlädt, und Shopware schreibt sie dann ins private Dateisystem (`files/`). Legt dein Import den Media-Eintrag ohne `private` an, ist der Wert `false` und die Datei landet unter `public/media`.

Da muss ich auch meine Antwort aus deinem anderen Thread korrigieren: Ich hatte geschrieben, der Ordner „Product downloads“ ist privat und eine Datei darin damit geschützt. Das stimmt so nicht. Die Einstellung am Ordner blendet ihn nur in der Medienverwaltung aus, ob eine Datei öffentlich liegt entscheidet allein `private` an der Datei. Sorry dafür.

**Die Auswirkung:** Eine Datei unter `public/media` kann jeder herunterladen der die URL kennt, auch ohne Kauf. Shopware leitet den Käufer beim Download einfach auf diese öffentliche URL weiter, und die kann er weitergeben. Bei einer privaten Datei prüft Shopware bei jedem Download, ob der Kunde eingeloggt ist und die Bestellung zu ihm gehört, und liefert die Datei selbst aus.

**Im Import** würde ich den Media-Eintrag deshalb so anlegen:

```auto
POST /api/media
{
  "id": "<media-id>",
  "private": true,
  "mediaFolderId": "<id vom Ordner Product downloads>"
}

```

und danach die Datei wie bisher hochladen (`POST /api/_action/media/<media-id>/upload?extension=pdf&fileName=...`). Den Ordner würde ich mitgeben, damit die Dateien so liegen wie beim Upload über die Download-Karte, private Dateien außerhalb davon blendet die Administration aus. Die Ordner-ID bekommst du per SQL:

```auto
SELECT LOWER(HEX(f.id)) FROM media_folder f
JOIN media_default_folder d ON d.id = f.default_folder_id
WHERE d.entity = 'product_download';

```

**Für die schon importierten Dateien** reicht es nicht, `private` nachträglich auf `true` zu setzen. Die Datei wird dabei nicht verschoben, Shopware sucht sie danach im privaten Bereich und findet sie nicht. Also neues Media mit `private: true` anlegen, hochladen, beim Download vom Produkt die neue `mediaId` eintragen und das alte Media löschen, dabei löscht Shopware auch die öffentliche Datei.

Wenn die Produkte schon verkauft wurden, hängen die Bestellungen noch am alten Media (`order_line_item_download`). Dann lässt Shopware das Löschen nicht zu, und die alte Datei bleibt öffentlich bis sie dort auch umgehängt ist.

Nachgeschaut habe ich das im Code von 6.7.11, getestet hab ich den Umbau nicht. Ob es geklappt hat siehst du an der Spalte `private` in der Tabelle `media` und daran, dass die alte /media/…-URL nicht mehr erreichbar ist.

---

<div class="post-metadata">

**Author:** ![R4M](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/r4m/32/9983_2.png) [@R4M](https://forum.shopware.com/u/R4M)\
**Post date:** [10. November 2026 um 08:56 UTC](https://forum.shopware.com/t/verstaendnisfrage-zu-download-produkten/109882/3 "2026-11-10T08:56:35Z")

</div>

Erst einmal vielen Dank für diese umfangreiche Rückmeldung. Da muss ich mal schauen, dass ich beim Weg über die API ‚private‘ mit definiere. Jetzt ergibt es einen Sinn. Vielen Dank!
