Bestandsopslag is een belangrijke functie die nodig is in meerdere processen in verschillende soorten toepassingen. Het bestaan van processen zoals Content Delivery Networks (CDNs)
, opgezet via cloud-opties van derden zoals Amazon Web Services, en lokale opties voor bestandsopslag hebben het altijd gemakkelijker gemaakt om een dergelijke functie te bouwen.
Het concept van het direct opslaan van bestanden in een database door middel van een enkele API-aanroep intrigeerde me echter al een hele tijd. Dat is waar GridFS voor mij in beeld kwam.
GridFS – A Layman’s Understanding
MongoDB has a driver specification to upload and retrieve files from it called GridFS. GridFS maakt het mogelijk om bestanden op te slaan en op te halen, inclusief bestanden die de BSON-documentlimiet van 16 MB overschrijden.
GridFS neemt in principe een bestand en splitst het op in meerdere chunks die als individuele documenten in twee collecties worden opgeslagen:
- de
chunk
collectie (slaat de documentdelen op), en - de
file
collectie (slaat de resulterende aanvullende metadata op).
Elke chunk is beperkt tot 255 KB in grootte. Dit betekent dat de laatste chunk normaal gesproken 255 KB of minder is. Klinkt nogal netjes.
Wanneer je leest van GridFS, herschikt het stuurprogramma alle chunks naar behoefte. Dit betekent dat je secties van een bestand kunt lezen volgens je query-bereik. Zoals het luisteren naar een segment van een audiobestand of het ophalen van een sectie van een videobestand.
Note: Het verdient de voorkeur om GridFS te gebruiken voor het opslaan van bestanden die normaal gesproken groter zijn dan de 16 MB-limiet. Voor kleinere bestanden wordt aanbevolen om het BinData-formaat te gebruiken om de bestanden in afzonderlijke documenten op te slaan.
Dit vat samen hoe GridFS in het algemeen werkt. Tijd om onze voeten dompelen in een aantal werkende code en zien hoe een systeem te implementeren als zodanig.
Genoeg gepraat, toon me de code
We maken gebruik van Node.js met toegang tot een cloud instantie van MongoDB voor onze setup. U kunt de code repository voor de voorbeeldapplicatie hier vinden.
We zullen ons volledig richten op segmenten van de code die te maken hebben met de functionaliteiten van GridFS. We zullen leren hoe we het kunnen instellen en gebruiken om bestanden op te slaan, bestanden of een bepaald bestand op te halen en een bepaald bestand te verwijderen. Laten we dan beginnen.
Initialiseer de Storage Engine
De pakketten die nodig zijn om de engine te initialiseren zijn multer-gridfs-storage
en multer
. We gebruiken ook method-override
middleware om de verwijder operatie voor bestanden mogelijk te maken. De npm module crypto
wordt gebruikt om de bestandsnamen te versleutelen bij het opslaan en lezen uit de database.
Als de opslag-engine die GridFS gebruikt eenmaal is geïnitialiseerd, hoef je het alleen maar aan te roepen met behulp van de multer middleware. Deze wordt vervolgens doorgegeven aan de respectieve route die de verschillende bestandsopslagbewerkingen uitvoert.