Medien speichern
Der Wissensspeicher hält Wissen und Links, Cloudinary speichert schwere Dateien. Jeder Speichervorgang erzeugt einen öffentlichen Link und einen Eintrag in kho-media.md.
Prioritätsreihenfolge: Benutzerwünsche in der aktuellen Sitzung, dann Repository-Regeln, dann dieses Skill.
Ersteinrichtung (nur ausführen, wenn kho-media.md noch nicht existiert)
-
Frage den Benutzer, ob er bereits ein Cloudinary-Konto hat. Falls nicht: Anleitung – zu cloudinary.com gehen, kostenlosen Account registrieren, im API-Bereich Cloud Name, API Key und API Secret abrufen.
-
Die Zugangsdaten liegen in der
.env-Datei im Repository-Root. Falls.envnoch nicht existiert, erstelle sie mit den drei folgenden Zeilen; falls sie bereits existiert, füge nur die fehlenden Zeilen hinzu, ohne andere zu ändern. Falls der Benutzer bereits eine andere Datei mit diesen drei Werten hat und diese verwenden möchte, verwende den Pfad zu dieser Datei anstelle von.env.CLOUDINARY_CLOUD_NAME= CLOUDINARY_API_KEY= CLOUDINARY_API_SECRET= -
Wenn das Repository Git verwendet, führe
git check-ignore -q .envaus. Falls die Datei nicht ignoriert wird, füge.envzur.gitignorehinzu, bevor du fortfährst. Falls.envbereits in Git versioniert wurde, brich ab und informiere den Benutzer. -
Öffne
.envfür den Benutzer: Windows:notepad .env, Mac:open -e .env. Bitte ihn, die Werte selbst hinter das=-Zeichen einzufügen, ohne Leerzeichen oder Anführungszeichen, zu speichern und nicht in den Chat zu kopieren. Der API Secret ist wie ein Schlüssel – jeder, der ihn hat, kann alle Bilder löschen oder ändern. -
Nach Bestätigung des Benutzers prüfe, ob alle drei Zeilen einen Wert enthalten, ohne die Werte auszugeben.
-
Erstelle
kho-media.mdnach der Vorlage am Ende dieser Datei, trage den Dateinamen der Zugangsdatei ein (nicht die Werte). Füge einen Eintrag inindex.mdhinzu. -
Bitte den Benutzer um ein Testbild, führe den untenstehenden Prozess aus und sende den Link. Wenn der Link funktioniert, ist die Einrichtung abgeschlossen.
Speicherprozess
1. Ist ein Cloud-Upload nötig?
Falls unklar: Frage, wofür das Bild verwendet wird.
- Öffentlicher Link erforderlich (Beiträge, E-Mails, Bots, Dokumentation, externe Websites): Fortfahren.
- Website mit eigenem Bildverzeichnis, aus dem bereits geladen wird: Nicht hochladen, da es zu zwei inkonsistenten Versionen käme. Stattdessen vorschlagen, die Datei in das Bildverzeichnis der Website mit einem sauberen Namen zu kopieren; nur bei Zustimmung des Benutzers kopieren. Hier abbrechen.
- Entwurf, Test, temporärer Screenshot: Lokal belassen und Grund erläutern. Bei Unsicherheit frage: „Wofür wirst du das verwenden?“
2. Doppelt vorhanden?
Suche Name und Verwendungszweck in kho-media.md. Falls vorhanden, gib den alten Link erneut aus und frage, ob der Benutzer eine neue Version hochladen möchte. Falls der Benutzer nur nach einem Link sucht, antworte aus der Datei und brich ab.
3. Werden private Daten preisgegeben?
Ein öffentlicher Link ist für jeden mit dem Link einsehbar und schwer zurückzurufen, sobald er verbreitet wurde. Prüfe den Bildinhalt. Siehst du Gesichter, Kundennamen, Kinder, Telefonnummern, Kontonummern, Ausweise oder private Nachrichten, teile dem Benutzer mit, was du erkennst, und frage, ob er sicher ist, das Bild hochzuladen.
4. Ordner zuweisen und benennen
| Ordner | Inhalt | Link eintragen in |
|---|---|---|
kho-media/thuong-hieu | Logo, Porträts, Cover, Markenauftritt | Marken- oder Profilseite |
kho-media/san-pham/<produktname> | Produktbilder, Mockups, Vorstellungsvideos | Produktseite |
kho-media/noi-dung/<yyyy-MM> | Beitragsbilder, Banner, Thumbnails, Kurzvideos | Content-Plan-Seite |
kho-media/bang-chung | Feedback, Vorher-Nachher, Zertifikate, Presse | Relevante Produktseite |
kho-media/su-kien/<event-name> | Eventfotos, Videos, Unterrichtsmaterial | Eventseite |
Datei- und Ordnernamen: ohne Akzente, Kleinbuchstaben, mit - verbunden, selbsterklärend – z. B. feedback-khach-lan-a. Bei Unsicherheit über den Ordner frage mit einer Frage und zwei nummerierten Optionen. Bei mehreren Dateien präsentiere eine Tabelle mit Dateinamen und zugewiesenen Ordnern, lass den Benutzer bestätigen und lade dann nacheinander hoch; fehlerhafte Dateien werden notiert und die Verarbeitung fortgesetzt.
5. Hochladen
Lies den Dateinamen der Zugangsdatei aus kho-media.md, verwende den vollständigen Pfad. Wenn die Zugangsdatei in einem Git-Repository liegt, führe git check-ignore -q <pfad-zur-zugangsdatei> aus: falls sie nicht ignoriert wird, brich ab und informiere den Benutzer. Kopiere den korrekten Befehl für das Betriebssystem, ersetze nur die vier Werte am Anfang. Gib den Befehl nicht auf dem Bildschirm aus, kopiere ihn nicht in Antworten, Seiten oder andere Dateien. Der Befehl kopiert die Datei selbstständig in einen temporären Namen ohne Sonderzeichen, da Pfade mit Akzenten oder Leerzeichen den Upload beschädigen können.
Windows (PowerShell):
$tep='<dateipfad>'; $ngan='<ordner>'; $ten='<name-ohne-extension>'; $fileMa='<pfad-zur-zugangsdatei>'
$m=@{}; Get-Content -LiteralPath $fileMa | ForEach-Object { if($_ -match '^\s*(?:CLOUDINARY_)?(CLOUD_NAME|API_KEY|API_SECRET)\s*=\s*(.+?)\s*$'){ $m[$Matches[1]]=$Matches[2] } }
$ts=[DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
$bam=[Security.Cryptography.SHA1]::Create().ComputeHash([Text.Encoding]::UTF8.GetBytes("folder=$ngan&overwrite=false&public_id=$ten×tamp=$ts$($m.API_SECRET)"))
$ky=-join($bam | ForEach-Object { $_.ToString('x2') })
$tenTam="luu-media-$ts"+[IO.Path]::GetExtension($tep); Copy-Item -LiteralPath $tep -Destination (Join-Path $env:TEMP $tenTam)
Push-Location $env:TEMP
try { curl.exe -sS -X POST "https://api.cloudinary.com/v1_1/$($m.CLOUD_NAME)/auto/upload" -F "file=@$tenTam" -F "api_key=$($m.API_KEY)" -F "timestamp=$ts" -F "folder=$ngan" -F "overwrite=false" -F "public_id=$ten" -F "signature=$ky" }
finally { Remove-Item -LiteralPath $tenTam -ErrorAction SilentlyContinue; Pop-Location }
Mac, Linux (bash):
TEP='<dateipfad>'; NGAN='<ordner>'; TEN='<name-ohne-extension>'; FILE_MA='<pfad-zur-zugangsdatei>'
lay() { sed -n -E "s/^[[:space:]]*(CLOUDINARY_)?$1[[:space:]]*=[[:space:]]*//p" "$FILE_MA" | tr -d '\r' | sed -E 's/[[:space:]]+$//' | head -n 1; }
TS=$(date +%s)
KY=$(printf '%s' "folder=$NGAN&overwrite=false&public_id=$TEN×tamp=$TS$(lay API_SECRET)" | { if command -v shasum >/dev/null; then shasum -a 1; else sha1sum; fi; } | cut -d' ' -f1)
curl -sS -X POST "https://api.cloudinary.com/v1_1/$(lay CLOUD_NAME)/auto/upload" -F "file=@$TEP" -F "api_key=$(lay API_KEY)" -F "timestamp=$TS" -F "folder=$NGAN" -F "overwrite=false" -F "public_id=$TEN" -F "signature=$KY"
Die Antwort ist JSON: extrahiere secure_url. Bei error gib die genaue Fehlermeldung aus und brich ab – schreibe keine eigene Fehlermeldung. Falls die Datei zu groß für das verwendete Paket ist, weise den Benutzer an, sie zu komprimieren. Der Befehl verwendet overwrite=false, um keine gleichnamige Datei zu überschreiben: falls die Dateiendung oder der zurückgegebene Inhalt von der gerade hochgeladenen Datei abweicht, benenne sie um und lade erneut hoch.
6. Prüfen und im Wissensspeicher ablegen
- Öffne den Link probeweise, prüfe, ob er erfolgreich geladen wird.
- Füge eine Zeile in
kho-media.mdein, Datum und Uhrzeit vom System entnehmen. - Füge den Link im Bereich „Medien“ der zugehörigen Seite ein (siehe letzte Spalte der Ordner-Tabelle). Falls diese Seite noch nicht existiert, trage nur in
kho-media.mdein und weise darauf hin.
7. Rückmeldung
Gib den Link, den Ordner und die beiden Seiten, in die eingetragen wurde, aus. Bei Bildern für Webseiten oder Beiträge füge eine schnell ladende Version hinzu, indem du direkt nach /upload/ folgenden String einfügst: f_auto,q_auto,w_1200/. Cloudinary wählt dann automatisch Format, Qualität und skaliert die Breite auf 1200 px.
Nicht tun
- Keine Dateien auf Cloudinary löschen oder verändern. Das erledigt der Benutzer selbst in der Media Library oder auf gesonderte und bestätigte Anfrage.
- Bild- und Videodateien nicht in das Git-Repository einchecken.
- Die Zugangsdaten befinden sich ausschließlich in der angegebenen Zugangsdatei. Nicht in Seiten, Protokollen, Skills oder Chat-Fenstern notieren. Vor der Weitergabe des Repository-Ordners an andere den Benutzer daran erinnern,
.envzu entfernen.
Vorlage für kho-media.md
# Medienverzeichnis
Cloud: Cloudinary. Zugangsdatei: `.env` im Repository-Root, nicht auf GitHub gespeichert.
| Datum/Uhrzeit | Dateiname | Ordner | Link | Verwendung für |
|---|---|---|---|---|