GridFS Vodič: Kako lako prenijeti datoteke i slike na MongoDB pomoću čvora

Pohrana datoteka je važna značajka potrebna u više procesa u različitim vrstama aplikacija. Postojanje procesa poput Content Delivery Networks (CDNs), postavljenih putem nezavisnih opcija u oblaku poput Amazon Web Services, i lokalnih opcija za pohranu datoteka uvijek je olakšavalo izgradnju takve značajke.

Međutim, koncept spremanja datoteka izravno u bazu podataka putem jednog API poziva pozivao me je prilično dugo. Tu se za mene pojavio GridFS.

GridFS - Laičko razumijevanje

MongoDB ima specifikaciju upravljačkog programa za prijenos i preuzimanje datoteka iz nje pod nazivom GridFS. GridFS vam omogućuje pohranu i preuzimanje datoteka, što uključuje one koje premašuju ograničenje veličine BSON-dokumenta od 16 MB .

GridFS u osnovi uzima datoteku i rastavlja je na više dijelova koji se pohranjuju kao pojedinačni dokumenti u dvije zbirke:

  • je chunkzbirka (pohranjuje dokument dijelovi), i
  • filezbirka (trgovina posljedično Dodatni metapodaci).

Svaki je komad ograničen na 255 KB. To znači da je posljednji komad obično jednak ili manji od 255 KB. Zvuči prilično uredno.

Kad čitate s GridFS-a, upravljački program po potrebi ponovno sastavlja sve dijelove. To znači da možete čitati odjeljke datoteke prema rasponu upita. Kao što je preslušavanje segmenta zvučne datoteke ili dohvaćanje dijela video datoteke.  

Napomena: Poželjno je koristiti GridFS za spremanje datoteka koje obično premašuju ograničenje veličine 16 MB. Za manje datoteke preporučuje se upotreba BinData formata za pohranu datoteka u pojedinačne dokumente.

Ovo rezimira kako GridFS uopće radi. Vrijeme je da umočimo noge u neki radni kod i vidimo kako implementirati sustav kao takav.

Dosta razgovora, pokaži mi šifru

Za postavljanje koristimo Node.js s pristupom instanci oblaka MongoDB. Spremište koda za uzorak aplikacije možete pronaći ovdje.

tarique93102 / gridfs-file-storage Doprinite razvoju tarique93102 / gridfs-file-storage stvaranjem računa na GitHubu. tarique93102 GitHub

U potpunosti ćemo se usredotočiti na segmente koda koji se odnose na funkcionalnosti GridFS-a. Naučit ćemo kako ga postaviti i koristiti za spremanje datoteka, preuzimanje datoteka ili određenu datoteku i brisanje određene datoteke. Krenimo onda.

Inicijalizirajte Storage Engine

Paketi potrebni za inicijalizaciju motora su multer-gridfs-storagei multer. Također koristimo method-overrideposrednički softver kako bismo omogućili operaciju brisanja datoteka. Modul npm cryptokoristi se za šifriranje imena datoteka prilikom pohrane i čitanja iz baze podataka.

Jednom kad je mehanizam za pohranu pomoću GridFS-a inicijaliziran, morate ga samo nazvati pomoću višestrukog međuopreme. Zatim se prosljeđuje na odgovarajuću rutu izvršavajući različite operacije pohrane datoteka.

Inicijalizirajte GridFS Stream

Inicijaliziramo GridFS tok kako se vidi u donjem kodu. Potok je potreban za čitanje datoteka iz baze podataka i za pomoć u prikazivanju slike u preglednik po potrebi.

Prenesite jednu datoteku ili sliku

Ponovno koristimo međuprodukt za prijenos koji smo stvorili ranije.  

Napomena: Ime filese koristi kao parametar upload.single()  jer imamo ključ sa sličnim imenom koji nosi datoteku koja se šalje s klijenta.

Prenesite više datoteka ili slika

Također možemo prenijeti više datoteka odjednom. Umjesto upload.single(), moramo jednostavno koristiti upload.multiple().

Napomena: Broj prenesenih datoteka može biti manji od definiranog broja datoteka.

Dohvati sve datoteke iz baze podataka

Korištenjem inicijaliziranog toka možemo dohvatiti sve datoteke u određenoj bazi podataka pomoću gfs.find().toArray(...). Nakon što se datoteke dobiju, mapiramo ih u niz i šaljemo odgovor.

Dohvaćanje jedne datoteke prema nazivu datoteke

Vrlo je jednostavno upitati GridFS za jednu datoteku na temelju određenog atributa, poput filename. Korištenjem GridFS toka možete putem baze podataka postaviti upit putem funkcije gfs.find({}).

Renderirajte dohvaćenu sliku u preglednik

Ovo je malo zamršeniji dio jer datoteku morate ne samo dohvatiti iz baze podataka već je i prikazati kao sliku u odgovarajućem pregledniku. Datoteku dohvaćamo normalno. Nema promjena u tom procesu.

Tada uz pomoć metode openDownloadStreamByName()na gfs streamu možemo lako prikazati sliku jer vraća čitljiv tok. Nakon toga možemo koristiti JavaScript pipe()za strujanje odgovora.

Izbrišite određenu datoteku ID-om

Brisanje datoteke jednako je jednostavno. Metodu stream delete()s _idparametrom koristimo za postavljanje upita i brisanje dotične datoteke.

To su glavne funkcionalnosti koje nudi dizajn skladišnog stroja. Iskoristio sam GridFS značajke o kojima se raspravljalo kako bih stvorio jednostavnu aplikaciju za prijenos slika. Možete dublje ući u kod u spremištu.

Zaključak

Trebalo mi je vremena i pristojne borbe da shvatim kako iskoristiti GridFS za osobni projekt. Zbog toga sam se želio uvjeriti da barem još jedna osoba ne mora ulagati isto toliko vremena.

Kad to kažem, preporučio bih opreznu upotrebu GridFS-a. To nije srebrni metak za sve vaše probleme s pohranom datoteka. Ipak, to je izvrsna specifikacija koju treba znati i biti svjestan.  

Ako imate bilo kakvih pitanja ili nedoumica, možete komentirati u postu ili me kontaktirati LinkedIn.

U međuvremenu nastavite s kodiranjem.