Afbeeldingen
Sommige soorten data kun je niet beschrijven met een getal of een tekstveld. Denk aan productfoto’s, profielfoto’s of
andere afbeeldingen. In dat soort gevallen gebruik je een speciaal datatype: het afbeeldingsveld (type: image
).
Hiermee kun je afbeeldingen opslaan in je database, inclusief bijbehorende metadata.
Wat is een afbeeldingsveld?
Een afbeeldingsveld is een speciaal type veld waarmee je een afbeelding kunt koppelen aan een item. Net als andere
velden voeg je dit toe onder de fields
-key in je collectie. Deze moet altijd op de volgende manier worden opgebouwd:
{ "name": "imageUrl", "type": "image", "required": false }
Afbeeldingen worden in deze database opgeslagen in Base64 formaat. Base64 is een manier om binaire bestanden (zoals afbeeldingen) om te zetten in tekst. Zo kun je ze makkelijk opnemen in JSON. Nadat een afbeelding is opgeslagen en deze zou opvragen, krijg je de volgende informatie terug uit de database:
{ "imageUrl": { "fileName": "logo_under_construction.svg", "contentType": "image/svg+xml", "length": 26660, "base64": "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIG..." } }
Om de afbeelding vervolgens in de frontend weer te kunnen gebruiken en weer te geven in een <img />
, zul je de
base64-string als volgt moeten opbouwen:
"data:[contentType];base64,[actualString]"
Wanneer we dit zouden doen met bovenstaand voorbeeld (het logo) zou dat de volgende string worden:
"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIG..."
Validatieregels
Wanneer afbeeldingen worden toegevoegd aan de database worden ze automatisch gecontroleerd op formaat, type en inhoud. Je hoeft hier niets voor in te stellen. Let er wel op dat afbeeldingen voldoen aan de volgende voorwaarden:
Validatie | Voorwaarde |
---|---|
Bestandsgrootte | Maximaal 2MB (2.097.152 bytes) |
Bestandsformaten | jpeg , png , gif , webp , svg+xml |
Bestandsinhoud | Moet een geldige base64-string bevatten |
Voorbeeld: collectie met afbeeldingsveld
{ "collections": [ { "name": "products", "fields": [ { "name": "id", "type": "number", "required": true }, { "name": "name", "type": "string", "required": true, "min": 2, "max": 100 }, { "name": "price", "type": "number", "required": false, "min": 0, "default": 0 }, { "name": "imageUrl", "type": "image", "required": false }, { "name": "categoryId", "type": "reference:categories", "required": true } ] } ] }
Afbeelding uploaden
Je kunt afbeeldingen op twee manieren uploaden:
1. Via multipart/form-data
Normaliter upload je afbeeldingen via een formulier doormiddel van multipart/form-data
. Dit is gebruikelijk voor
frontend-implementaties omdat je met meerdere soorten data werkt (denk een aan product waarvan je zowel de naam, prijs
en afbeelding in één keer verstuurd). De API verwacht de afbeelding onder de key imageUrl
in het FormData
-object.
2. Als JSON met base64-encoded inhoud
Bij deze methode verstuur je de afbeelding als onderdeel van een JSON-object. Deze methode is vooral handig wanneer je de database vooraf wil vullen met testdata via je JSON-configuratiebestand. Doe dit altijd volgens deze opbouw:
{ "imageUrl": { "fileName": "product.jpg", "contentType": "image/jpeg", "length": 12345, "base64": "9j4AAQSkZJRgABAQEAYABgAAD..." } }
Hierbij is fileName
de naam van het geüploade bestand, contentType
het MIME-type, zoals image/jpeg
, of
image/svg+xml
, length
de grootte van de afbeelding in bytes en base64
de afbeeldingsdata als base64-gecodeerde
string. Er zijn online tooltjes te vinden die een afbeelding voor je converteren naar base64, zoals
bijvoorbeeld jam.dev. Zijn je afbeeldingen groter dan 2MB? Verklein ze dan
eerst met een compressie-tool, zoals Tiny.