Bilddatenbanken
Im Forum habe ich einige Themen zu Bilddatenbanken gesehen. Ich habe mich schon einmal vor Jahren mit Ninox im Vergleich zu Filemaker mit diesem Thema beschäftigt. Es gibt mit Sicherheit durchaus geeignetere hochperfomante Bilddatenbankverwaltungsprogramme, die man aber leider nicht nach "Gusto"verändern kann. Das Filemaker Programm welches ich im Einsatz hatte, konnte Mitgliedsausweise; Schülerausweise herstellen. Das laden von Bilddaten in die Datenbank war per Stapelverarbeitung möglich. Bild- und Textdaten waren somit in einem Rutsch verbunden. sofern Bildreihenfolge mit der Reihenfolge in der .csv Tabelle übereinstimmt hat.
Scenario: In eine bestehende Datenbank sollen eine größere Mengen an Passbildern/Bilddaten (fortlaufend nummeriert in . jpg ) Geliefert eine.csv Tabelle und ein Ordner mit den Bildern. Die Verknüpfung ist die Datenbezeichnung Bild und ein in der Tabelle entsprechenden Datensatznummer. Bild und Person sollten übereinstimmen.
Das kann ich mit Ninox lösen. Allerdings nicht im Stapel, sondern nur manuell. Das ist bei wenigen Datensätzen kein Problem aber je nach "Schmerzgrenze" hat man dann keine Lust mehr, zumal es ja mal schneller ging. Auch die Darstellung im Druck (mehrere Datensätze (Ausweise)auf einem DINA4 Blatt) ist nicht so einfach.
Die Lösung die ich suche/wünsche, ist eine im Stapel verarbeitende Bildimportfunktion also ein Bildordner, der in einem Rutsch die Bilder in die Tabelle kopiert. Die Bilddaten müssen für Ausweise nicht groß sein also eher "s" statt "xxl". Ich kann mir gut vorstellen, dass es auch noch andere Verwendungsarten gibt, als das erstellen von Ausweisen. z.B. Rapport Versicherungsschaden mit gelieferten großen Bildmengen (>100) die nachträglich in einer Datenbank mit Textdaten verarbeitet werden soll.
Das wäre schon cool.
25 Antworten
-
...also eine Funktion, die die Bilder, in einem Bildordner, in einem Rutsch in die Tabelle kopiert.
-
Ja, das leidige Thema.... Du hast also eine Datensatznummer in deiner Tabelle (X12345) und einen Ordner voller Bilder (X12345.jpg, X67890.jpg usw...)?
Dann würde ich alle Bilddaten via FTP auf einen Webserver legen und in Ninox via import(this, "www.DEINSERVER.de/Bilder/" + Datensatznummer + ".jpg", Datensatznummer + ".jpg") darauf zugreifen. Wenn es jedoch mehrere Bilder pro Datensatz sind, musst Du einen Weg finden das Ganze in einer Schleife zu lösen...
Du könntest eine Untertabelle mit den zu erwartenden Bildern anlegen, oder ein einfaches Textfeld mit den zugehörigen Bildnamen ("X1234-01.jpg, X1234-02.jpg, X1234-03.jpg").
Wenn Du das für jeden Datensatz hast, kann man via for-Schleife durch die Untertabelle oder die einzelnen Einträge aus dem Textfeld iterieren und das entsprechende Bild vom FTP server ziehen.
-
Wie gesagt, du kannst relativ Problemlos über importFile() Bilder die via URL erreichbar sind in die NINOX holen, entweder als Anhang - oder das importierte File direkt einem Bildfeld zuordnen. Das wäre bei deiner Aufgabenstellung mit je einem Bild schnell umzusetzen.
Ich selber habe auch schon via API Bilder bzw. PDF Dateien in die Dropbox geladen - das klappt auch.
Was ich zuletzt noch umgesetzt habe, war ein komplettes Auslagern aller PDF Dokumente aus der Ninox nach Cloudinary - die haben ein Free-Angebot mit 20 od. 25 GB Speicher. Wenn du Dateien dort über die API ablegst, bekommst Du auch einen Sharelink zurück. Diesen lasse ich mir über ein mit iFrame eingebettetes PDF anzeigen. Das sieht dann so aus:
-
Wenn man Pdf mit Bildern drucken möchte, rate ich zum dyn. Druck.
Man kann hier, gegenüber der einfachen Druckausgabe, mit den ShareLinks der Bilder arbeiten und muss diese nicht vorab nach Ninox laden. -
T. Bartzsch said:
Wenn du Dateien dort über die API ablegst, bekommst Du auch einen Sharelink zurück.Genau das möchte ich lernen. Geht die API auch mit dem Test-Account, den ich nun seit dieser Woche nutze? Wie ist das Prozedere? Cloudinary Account ist eröffnet und bereit zum testen. Gerne würde ich das auch mit Dropbox machen.
-
Ja, die API sollte auch mit dem Testaccount gehen... ich kann dir das Prozedere leider erst Anfang der Woche etwas ausführlicher erklären, bin am WE nicht am Rechner... Wenn man schon das Meer vor der Tür hat, dann muss man das auch nutzen :)
-
Bei mir sind es dann eher die Aerosole - wobei hier in der 1.Linie in S'Arenal auch noch einiges Andere durch die Luft schwebt...
Also, zum Ablauf des Hochladens auf Cloudinary:
Du musst - wenn du dich da registriert hast - zunächst unter SETTINGS / UPLOAD ein Upload preset anlegen. Dieses nennst du dann zB NinoxUpload ... der Signing Mode ist "unsigned", Use filename or externally... kann auf "on"
Api Key und den Cloudname findest du im Dashboard bei Cloudinary.
In deiner Ninox Datenbank brauchst du ein mehrzeiliges Textfeld "Cloudinary_API", ein URL Feld "Cloudinary-Link" und dein Bildfeld in dem das auszulagernde PDF liegt (man kann auch durch alle Dateianhänge gehen und die der Reihe nach hochladen, da muss man die Formel umbauen) - bei mir heisst das Bildfeld "PDF"... auf einen Button legst Du dann folgendes Script:
let Bildlink := shareFile(PDF); let data := { file: Bildlink, folder: "UNTERORDNER", upload_preset: "NinoxUpload", public_id: item(split(replace(text(PDF), ".pdf", ""), "/"), 1), api_key: "DEINAPIKEY" }; Cloudinary_API := "Sende Daten an Cloudinary..."; do as server let response := http("POST", "https://api.cloudinary.com/v1_1/DEINCLOUDNAME/auto/upload", data); Cloudinary_API := text(response); 'Cloudinary-Link' := text(response.result.secure_url); end;
Jetzt müsste das Bild auf Cloudinary liegen.
Jetzt macht aber eine Automatik keinen Sinn, wenn Du manuell das Bild aus der Ninox löschen müsstest - also löschen wir den Dateianhang über die Ninox API (das ist die unelegante Lösung mit hardcodierter URL ohne teamId() und databseId() ...). Deinen Ninox API Key machst/findest Du auf der Ninox DB Startseite, wo du rechts die Infos über dein Abo hast, oben unter dem Zahnrad -> Integrationen...
let myFile := urlEncode(item(split(text(files(this)), "/"), 1)); let myId := number(this); let auth := { Authorization: "Bearer DEINTOKEN", 'Content-Type': "application/json" }; do as server http("DELETE", "https://api.ninoxdb.de/v1/teams/DEINETEAMID/databases/DEINEDATENBANKID/tables/A/records/" + myId + "/files/" + myFile, auth, {}) end
Jetzt ist der original-Anhang aus dem Datensatz gelöscht (wenn es nur einen Anhang gegeben hat. Falls mehrere Anhänge existieren, z.B. noch ein weiteres Bild oder PDF ... muss man etwas vorsichtiger beim löschen über die API sein...
Du kannst das jetzt das Ursprungsbild/PDF im Bildfeld noch durch eine niedrige aufgelöste Vorschau von Cloudinary ersetzen, das kostet allerdings eine weitere Cloudinary "Transaktion" (du hast aber genug). dazu einfach nach dem "end;" im obigen Script noch diese beiden Zeilen einfügen:
sleep(1000); PDF := importFile(this, replace(replace('Cloudinary-Link', "upload/", "upload/c_scale,w_300/"), ".pdf", ".jpg"));
So, jetzt hast du dein Original Bild/PDF auf Cloudinary, hast deinen Ninox Anhang gelöscht und u.U. ein kleines Vorschaubild von Cloudinary in Ninox abgelegt. Jetzt kannst Du dir in einem Formel-Feld noch via iFrame das Original auf Cloudinary über den Link anzeigen lassen:
html("<embed iframe src=" + 'Cloudinary-Link' + " width=98% height=98%></iframe>")
-
Kurz auf die schnelle, ich habe heute etwas Zeitdruck... PDF und ZIP unter Einstellungen, Sicherheit aktivieren...
-
Ansonsten, wenn ein Bild geht... das Ganze Prozedere in eine for-Schleife setzen:
for i in files(this) .....
-
lass doch "response" ... welches ja die API Antwort von Cloudinary enthält mal in ein Mehrzeiliges Textfeld fliessen
Textfeld := text(response)
da siehst du, dass "response.result.secure_url" den link enthält.
Ich würde aber nicht mit Bildfeldern arbeiten - lege dir eine Untertabelle mit den Anhängen an und lasse Ninox für jede Datei einen neuen Eintrag in der Untertabelle machen. Darin ist dann nur das iFrame, ein Linkfeld .... und ggf. ein Bildfeld mit einer kleinen 300px Vorschau die von Cloudinary kommt.
Ich kann heute leider nur sehr knapp antworten, sorry...
-
OK.... ja, dann schreib dir den Rückgabewert innerhalb der Schleife immer wieder in die gleiche Variable und hänge noch ein Trennzeichen an, damit du das später mit split trennen kannst..
rückgabe := rückgabe + "#" + text(response....usw)
Content aside
- Status Answered
-
2
„Gefällt mir“ Klicks
- vor 11 MonatenZuletzt aktiv
- 25Antworten
- 361Ansichten
-
8
Folge bereits