Hilfe beim Auslagern von Datein
Grüßt euch,
kann mir jemand helfen bei dem Thema?
Kurz zum Vorgang:
Es werden in Ninox Bilder und ein pdf als Abrechnung in Bildfelder eingefügt. Dann sollen die Dateien umbenannt werden und schließlich werden sie per Mail gesendet. Im Anschluss werden alle Dateien zu Cloudinary hochgeladen, in der Ninox gelöscht, so dass am Ende nur noch eine HTML anzeige aller Dateien zur Verfügung steht. Sollte man die Dateien nochmals brauchen oder bearbeiten wollen, kann man sie in die Bildfelder zurückladen. Erlaubt sind die Formate jpg & pdf , auch darf die Einzeldatei nicht größer als 10 MB sein. Die gesamt Größe für den Mailversand 20 MB nicht überschreiten.
So weit, so gut. Habe es mal versucht alleine hinzubekommen, doch hab ich noch ein paar Probleme, die ich nicht gelöst bekomme.
- Beim uploade zu Coudinary werden die Dateien nochmals umbenannt. (es wird noch mal die Dateiendung dran gehangen. Was vorher: xyz.jpg hieß, wird zu: xyz.jpg.jpg
- Es dürfen keine Dateien in Ninox gelöscht werden, wenn der Upload nicht erfolgreich war von ALLEN Dateien
- wenn man die Dateien von Cloudinary zurück zu Ninox lädt, so müssen diese auf Cloudinary auch gelöscht werden, nicht nur um Dateileichen zu vermeiden, sondern weil die veränderte Datei denselben Namen bekommt so dass die Datei dann auf Cloudiynary nicht ersetzt wird, da sie schon existiert.
- Schluss endlich müsste ich das Ganze beim ersten Durchlauf für alle Datensätze ausführen (Umbenennen , zu Cloudinary senden und in Ninox löschen ca. 1650 Datensätze).
Hab bestimmt noch viel Blödsinn in den Skripten mangels wissen, aber vielleicht könnt ihr mir helfen.
10 Antworten
-
Läuft das über Maker, Zapier, n8n oder direkt über die API?
-
let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName := id + bb + last(split(text(Abrechnung), "/")); let Bildlink := shareFile(Abrechnung); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "UNTERORDNER", upload_preset: uploadkey, public_id: BildfileName, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseAbrechnung := text(response); linkAbrechnung := text(response.result.secure_url)
Mit der puplic_id aus Record Nr+Zeitstempel hab ich das Problem des Zuordnens gelöst. Es werden neue oder geänderte Bilder hochgeladen und auch für den jeweiligen Record zurückgegeben als URL. Ging vorher nicht, da die ID nur aus Datum, Bildfeldname und Kundenname bestand.
-
Die Dateiendungen beim zurück gegebenen Link, kann man auch ignorieren, da die Dateien vor dem erneuten Versenden per Mail eh wieder umbenannt werden.
Bleibt noch das größte Problem, wie verhindere ich das Löschen der Dateien in Ninox, wenn ein Fehler bei einem Upload entstanden ist? Und wie mache ich das sichtbar als Fehlermeldung?
Wobei so eine Fehlermeldung jetzt nicht schlimm ist, da ja kein File vorhanden ist .
{"result":{"error":{"message":"Missing required parameter - file"}}}
Noch ein Szenario müsste gelöst werden.
Wenn ich die Dateien schon gesendet habe, nun aber noch eine Datei hinzufüge oder ändern möchte, so lade ich alle Dateien zurück in Ninox, mit der neuen ID (Zeitstempel) fabriziere ich aber für diesen Datensatz beim erneuten Hochladen Duplikate, welche nur Platz wegnehmen. Wie kann man das verhindern?
Bsp.: 5 Dateien sind enthalten, jetzt lade ich 1 zusätzliches Bild hoch. So sind dann am Ende zu diesem Record 11 Dateien in Cloudinary abgelegt. Da sich ja der Zeitstempel und somit die ID geändert hat.
-
Dupletten werden jetzt so weit wie es mir möglich ist verhindert. Fehlt noch das keine Datein gelöscht werden dürfen bei einer fehlerhaften übertragung.
let pr := MBAbrechnung + MBBild1 + MBBild2 + MBBild3 + MBBild4 + MBBild5 + MBBild6 + MBBild7 + MBBild8 + MBBild9 + MBBild10; if pr > 20 then alert("Mailgröße überschritten (max: 20 MB möglich) versenden NICHT möglich! Bitte die Bilder verkleinern und erneut senden.") else let Tag := 'Abrechnung vom'; let Kunde := replacex('Aufträge'.Name, "[^äöüÄÖÜ!&?,. \w]", ""); let fileAbrechnung := shareFile(Abrechnung); let fileBild1 := shareFile(Bild1); let fileBild2 := shareFile(Bild2); let fileBild3 := shareFile(Bild3); let fileBild4 := shareFile(Bild4); let fileBild5 := shareFile(Bild5); let fileBild6 := shareFile(Bild6); let fileBild7 := shareFile(Bild7); let fileBild8 := shareFile(Bild8); let fileBild9 := shareFile(Bild9); let fileBild10 := shareFile(Bild10); let endAbrechnung := if contains(text(Abrechnung), ".PDF") or contains(text(Abrechnung), ".pdf") then ".pdf" else if contains(text(Abrechnung), ".jpg") or contains(text(Abrechnung), ".jpeg") then ".jpg" end end; let endBild1 := if contains(text(Bild1), ".PDF") or contains(text(Bild1), ".pdf") then ".pdf" else if contains(text(Bild1), ".jpg") or contains(text(Bild1), ".jpeg") then ".jpg" end end; let endBild2 := if contains(text(Bild2), ".PDF") or contains(text(Bild2), ".pdf") then ".pdf" else if contains(text(Bild2), ".jpg") or contains(text(Bild2), ".jpeg") then ".jpg" end end; let endBild3 := if contains(text(Bild3), ".PDF") or contains(text(Bild3), ".pdf") then ".pdf" else if contains(text(Bild3), ".jpg") or contains(text(Bild3), ".jpeg") then ".jpg" end end; let endBild4 := if contains(text(Bild4), ".PDF") or contains(text(Bild4), ".pdf") then ".pdf" else if contains(text(Bild4), ".jpg") or contains(text(Bild4), ".jpeg") then ".jpg" end end; let endBild5 := if contains(text(Bild5), ".PDF") or contains(text(Bild5), ".pdf") then ".pdf" else if contains(text(Bild5), ".jpg") or contains(text(Bild5), ".jpeg") then ".jpg" end end; let endBild6 := if contains(text(Bild6), ".PDF") or contains(text(Bild6), ".pdf") then ".pdf" else if contains(text(Bild6), ".jpg") or contains(text(Bild6), ".jpeg") then ".jpg" end end; let endBild7 := if contains(text(Bild7), ".PDF") or contains(text(Bild7), ".pdf") then ".pdf" else if contains(text(Bild7), ".jpg") or contains(text(Bild7), ".jpeg") then ".jpg" end end; let endBild8 := if contains(text(Bild8), ".PDF") or contains(text(Bild8), ".pdf") then ".pdf" else if contains(text(Bild8), ".jpg") or contains(text(Bild8), ".jpeg") then ".jpg" end end; let endBild9 := if contains(text(Bild9), ".PDF") or contains(text(Bild9), ".pdf") then ".pdf" else if contains(text(Bild9), ".jpg") or contains(text(Bild9), ".jpeg") then ".jpg" end end; let endBild10 := if contains(text(Bild10), ".PDF") or contains(text(Bild10), ".pdf") then ".pdf" else if contains(text(Bild10), ".jpg") or contains(text(Bild10), ".jpeg") then ".jpg" end end; let bezAbrechnung := Tag + "-" + Kunde + "-" + "Abrechnung"; let bezBild1 := Tag + "-" + Kunde + "-" + "Bild1"; let bezBild2 := Tag + "-" + Kunde + "-" + "Bild2"; let bezBild3 := Tag + "-" + Kunde + "-" + "Bild3"; let bezBild4 := Tag + "-" + Kunde + "-" + "Bild4"; let bezBild5 := Tag + "-" + Kunde + "-" + "Bild5"; let bezBild6 := Tag + "-" + Kunde + "-" + "Bild6"; let bezBild7 := Tag + "-" + Kunde + "-" + "Bild7"; let bezBild8 := Tag + "-" + Kunde + "-" + "Bild8"; let bezBild9 := Tag + "-" + Kunde + "-" + "Bild9"; let bezBild10 := Tag + "-" + Kunde + "-" + "Bild10"; "// //Datein nur umbenennen wenn der Dateiname nicht identisch ist mit dem Link von Cloudinary //"; if item(split(linkAbrechnung, "/"), 8) != last(split(text(Abrechnung), "/")) then Abrechnung := importFile(this, fileAbrechnung, bezAbrechnung + endAbrechnung) end; if item(split(linkBild1, "/"), 8) != last(split(text(Bild1), "/")) then Bild1 := importFile(this, fileBild1, bezBild1 + endBild1) end; if item(split(linkBild2, "/"), 8) != last(split(text(Bild2), "/")) then Bild2 := importFile(this, fileBild2, bezBild2 + endBild2) end; if item(split(linkBild3, "/"), 8) != last(split(text(Bild3), "/")) then Bild3 := importFile(this, fileBild3, bezBild3 + endBild3) end; if item(split(linkBild4, "/"), 8) != last(split(text(Bild4), "/")) then Bild4 := importFile(this, fileBild4, bezBild4 + endBild4) end; if item(split(linkBild5, "/"), 8) != last(split(text(Bild5), "/")) then Bild5 := importFile(this, fileBild5, bezBild5 + endBild5) end; if item(split(linkBild6, "/"), 8) != last(split(text(Bild6), "/")) then Bild6 := importFile(this, fileBild6, bezBild6 + endBild6) end; if item(split(linkBild7, "/"), 8) != last(split(text(Bild7), "/")) then Bild7 := importFile(this, fileBild7, bezBild7 + endBild7) end; if item(split(linkBild8, "/"), 8) != last(split(text(Bild8), "/")) then Bild8 := importFile(this, fileBild8, bezBild8 + endBild8) end; if item(split(linkBild9, "/"), 8) != last(split(text(Bild9), "/")) then Bild9 := importFile(this, fileBild9, bezBild9 + endBild9) end; if item(split(linkBild10, "/"), 8) != last(split(text(Bild10), "/")) then Bild10 := importFile(this, fileBild10, bezBild10 + endBild10) end; sleep(1000); let Anhang_auslesen := for i in files(this) do let alleFileName := last(split(text(i), "/")); let BildfileName := last(split(text(Abrechnung), "/")); let BildfileName1 := last(split(text(Bild1), "/")); let BildfileName2 := last(split(text(Bild2), "/")); let BildfileName3 := last(split(text(Bild3), "/")); let BildfileName4 := last(split(text(Bild4), "/")); let BildfileName5 := last(split(text(Bild5), "/")); let BildfileName6 := last(split(text(Bild6), "/")); let BildfileName7 := last(split(text(Bild7), "/")); let BildfileName8 := last(split(text(Bild8), "/")); let BildfileName9 := last(split(text(Bild9), "/")); let BildfileName10 := last(split(text(Bild10), "/")); let vergleich := unique(alleFileName); "// //Alle Anhänge löschen die nicht identisch sind mit den Bildfeldern //"; for r in vergleich do if BildfileName != r and BildfileName1 != r and BildfileName2 != r and BildfileName3 != r and BildfileName4 != r and BildfileName5 != r and BildfileName6 != r and BildfileName7 != r and BildfileName8 != r and BildfileName9 != r and BildfileName10 != r then let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamId() + "/databases/" + databaseId() + "/tables/" + tableId(this) + "/records/" + Nr + "/files/" + r; fx_AnhangLoeschen(text(vUrl)) end end end; let mailtext := --- <p>Sehr geehrte Damen und Herren,</p><p>anbei die Abrechnung von { text('Abrechnung vom') }.<br><br> <p>Für Rückfragen stehe ich Ihnen jederzeit gerne telefonisch zur Verfügung.</p> </p> ---; "// // Mail über Make versenden //"; let vWebhook := first(select NinoxKeys).text(WebhookMake); let vRecordID := text(number(this)); let An := 'Aufträge'.'E-Mail'; let bet := "Abrechnung vom" + " " + 'Abrechnung vom' + " " + "/ " + 'Aufträge'.Name; let data := { RecordID: vRecordID, vMailAn: An, vBetreff: bet, vTextHTML: mailtext }; do as server http("POST", vWebhook, { 'Content-Type': "application/json" }, data) end; 'versendet?' := true; sleep(1000); "// //Datein nur zu Cloudinary senden wenn sie nicht den identischen filenamen haben wie im Link, dadurch werden nur neue oder geänderte Files übertragen und man kann die Datein so oft man will in Ninox zurück holen, wenn sie nicht geändert wurden werden sie nicht noch mal an Cloudinary versendet //"; if Abrechnung and item(split(linkAbrechnung, "/"), 8) != last(split(text(Abrechnung), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName := id + bb + last(split(text(Abrechnung), "/")); let Bildlink := shareFile(Abrechnung); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseAbrechnung := text(response); linkAbrechnung := text(response.result.secure_url) end end; if Bild1 and item(split(linkBild1, "/"), 8) != last(split(text(Bild1), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName1 := id + bb + last(split(text(Bild1), "/")); let Bildlink := shareFile(Bild1); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName1, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild1 := text(response); linkBild1 := text(response.result.secure_url) end end; if Bild2 and item(split(linkBild2, "/"), 8) != last(split(text(Bild2), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName2 := id + bb + last(split(text(Bild2), "/")); let Bildlink := shareFile(Bild2); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName2, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild2 := text(response); linkBild2 := text(response.result.secure_url) end end; if Bild3 and item(split(linkBild3, "/"), 8) != last(split(text(Bild3), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName3 := id + bb + last(split(text(Bild3), "/")); let Bildlink := shareFile(Bild3); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName3, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild3 := text(response); linkBild3 := text(response.result.secure_url) end end; if Bild4 and item(split(linkBild4, "/"), 8) != last(split(text(Bild4), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName4 := id + bb + last(split(text(Bild4), "/")); let Bildlink := shareFile(Bild4); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName4, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild4 := text(response); linkBild4 := text(response.result.secure_url) end end; if Bild5 and item(split(linkBild5, "/"), 8) != last(split(text(Bild5), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName5 := id + bb + last(split(text(Bild5), "/")); let Bildlink := shareFile(Bild5); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName5, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild5 := text(response); linkBild5 := text(response.result.secure_url) end end; if Bild6 and item(split(linkBild6, "/"), 8) != last(split(text(Bild6), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName6 := id + bb + last(split(text(Bild6), "/")); let Bildlink := shareFile(Bild6); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName6, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild6 := text(response); linkBild6 := text(response.result.secure_url) end end; if Bild7 and item(split(linkBild7, "/"), 8) != last(split(text(Bild7), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName7 := id + bb + last(split(text(Bild7), "/")); let Bildlink := shareFile(Bild7); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName7, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild7 := text(response); linkBild7 := text(response.result.secure_url) end end; if Bild8 and item(split(linkBild8, "/"), 8) != last(split(text(Bild8), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName8 := id + bb + last(split(text(Bild8), "/")); let Bildlink := shareFile(Bild8); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName8, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild8 := text(response); linkBild8 := text(response.result.secure_url) end end; if Bild9 and item(split(linkBild9, "/"), 8) != last(split(text(Bild9), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName9 := id + bb + last(split(text(Bild9), "/")); let Bildlink := shareFile(Bild9); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName9, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild9 := text(response); linkBild9 := text(response.result.secure_url) end end; if Bild10 and item(split(linkBild10, "/"), 8) != last(split(text(Bild10), "/")) then let id := text(Nr); let aa := number(now()); let bb := text(aa); let BildfileName10 := id + bb + last(split(text(Bild10), "/")); let Bildlink := shareFile(Bild10); let uploadkey := first(select NinoxKeys).text(CloudinaryUpload); let ninoxkey := first(select NinoxKeys).text(NinoxAPI); let cloudikey := first(select NinoxKeys).text(CloudinaryAPI); let webhook := first(select NinoxKeys).text(WebhookCloudinary); let data := { file: Bildlink, folder: "Abrechnungen", upload_preset: uploadkey, public_id: BildfileName10, api_key: cloudikey }; do as server let response := http("POST", webhook, data); responseBild10 := text(response); linkBild10 := text(response.result.secure_url) end end; "// //Bildfelder leeren //"; Abrechnung := null; Bild1 := null; Bild2 := null; Bild3 := null; Bild4 := null; Bild5 := null; Bild6 := null; Bild7 := null; Bild8 := null; Bild9 := null; Bild10 := null; "// //restlichen Anhänge (auch die nicht sichtbaren löschen) //"; let Anhang_auslesen := for i in files(this) do let alleFileName := last(split(text(i), "/")); let vUrl := "https://api.ninoxdb.de/v1/teams/" + teamId() + "/databases/" + databaseId() + "/tables/" + tableId(this) + "/records/" + Nr + "/files/" + alleFileName; fx_AnhangLoeschen(text(vUrl)) end; uploade = true end
-
Vielleicht kanns ja jemand gebrauchen, oder verbessert das ganze noch.
Geil wäre das manuelle löschen von Datein auf Cloudinary von Ninox aus.
Der Rest sollte jetzt alles funktionieren.
-
Hallo zusammen,
so langsam muss ich mich auch mit dem Thema 'auslagern von Bilddateien' beschäftige, da ma ja mit 2GB dann doch schnell an Grenzen stoßen wird, falls Ninox an seiner Preispolitik bzw eher 'Speicherplatz-Politik' nichts ändern wird.
Daher die Frage, wie schaut es eigentlich aus, wenn man einen NAS Server (Synology) hat?
Kann ich die Bilddateien auf meinen SynologyServer laden?
Oder auf die webseite? zb https://www.meinewebseite.de/ausgelagerterOrdner
Vielen Dank.
Gruß kruna
-
Hallo Zusammen, so langsam ist Licht am ende des Tunnels, da kann man auch mal wieder ins Forum schauen...
Webseite/Ordner geht über Drittanbieter wie Make od. Zapier... es gibt auch eine reine FTP-API (ftp-api.com) - ABER (es wäre ja zu schön) - diese erwartet beim File-upload den Inhalt als base64, was NINOX leider nicht anbietet (genauso wie übrigens den Upload als multiform/form data - was viele weitere API Dienste in dieser Kategorie (z.B. upload von Rechnungs-PDF in ein Buchhaltungsprogramm) ebenfalls ausschliesst ... (ich habe übrigens vorher NIE beim schreiben Klammern verschachtelt - aber es geht ja um NINOX ) ) :)
Lokale Daten (auch NAS) geht evtl. über N8N - damit habe ich mich bisher aber noch nicht beschäftigt - ich glaube hat da mehr Wissen...
... ich schaue mir das mal an und lade deine Datenbank herunter. Der "public name" bei Cloudinary muss übrigens OHNE Dateiendung angegeben werden, sonst kommt es zu diesen Doppel-endungen...
Content aside
- vor 1 JahrZuletzt aktiv
- 10Antworten
- 254Ansichten
-
4
Folge bereits