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:
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:
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.