GridFS Guide: Kako enostavno prenesti datoteke in slike v MongoDB z uporabo vozlišča

Shramba datotek je pomembna funkcija, ki se zahteva v več procesih za različne vrste aplikacij. Obstoj procesov, kot so Content Delivery Networks (CDNs), nastavljeni prek zunanjih možnosti v oblaku, kot so Amazon Web Services, in možnosti lokalnega shranjevanja datotek so vedno olajšali izdelavo takšne funkcije.

Vendar me je koncept shranjevanja datotek neposredno v bazo podatkov z enim samim klicem API že nekaj časa navduševal. Tu se je zame pojavil GridFS.

GridFS - Laično razumevanje

MongoDB ima specifikacijo gonilnika za nalaganje in pridobivanje datotek iz nje, imenovano GridFS. GridFS vam omogoča shranjevanje in pridobivanje datotek, vključno s tistimi, ki presegajo omejitev velikosti dokumenta BSON 16 MB .

GridFS v bistvu vzame datoteko in jo razdeli na več kosov, ki so shranjeni kot posamezni dokumenti v dveh zbirkah:

  • za chunkzbiranje (shranjuje dokument deli), in
  • filezbirka (trgovin posledično dodatno metapodatki).

Vsak kos je omejen na 255 KB. To pomeni, da je zadnji del običajno enak ali manjši od 255 KB. Sliši se precej lepo.

Ko berete iz GridFS, voznik po potrebi znova sestavi vse dele. To pomeni, da lahko berete odseke datoteke v skladu z vašim poizvedbenim obsegom. Na primer poslušanje segmenta zvočne datoteke ali pridobivanje odseka video datoteke.  

Opomba: Za shranjevanje datotek, ki običajno presegajo omejitev 16 MB, je bolje uporabiti GridFS. Za manjše datoteke je priporočljivo, da uporabite format BinData za shranjevanje datotek v posamezne dokumente.

To povzema, kako GridFS deluje na splošno. Čas je, da se potopimo v neko delovno kodo in si oglejte, kako uvesti sistem kot tak.

Dovolj govori, pokaži mi kodo

Za našo nastavitev uporabljamo Node.js z dostopom do primerka MongoDB v oblaku. Skladišče kod za vzorčno aplikacijo najdete tukaj.

tarique93102 / gridfs-file-storage Prispevajte k razvoju tarique93102 / gridfs-file-storage z ustvarjanjem računa na GitHub. tarique93102 GitHub

Popolnoma se bomo osredotočili na segmente kode, ki se nanašajo na funkcionalnosti GridFS. Naučili se bomo, kako jo nastaviti in uporabiti za shranjevanje datotek, pridobivanje datotek ali določene datoteke in brisanje določene datoteke. Začnimo potem.

Inicializirajte Storage Engine

Paketi, potrebni za inicializacijo motorja, so multer-gridfs-storagein multer. Uporabljamo tudi method-overridevmesno programsko opremo, da omogočimo operacijo brisanja datotek. Modul npm cryptose uporablja za šifriranje imen datotek, ki jih shranjujete in berete iz baze podatkov.

Ko je pomnilniški mehanizem z uporabo GridFS inicializiran, ga morate poklicati z vmesno programsko opremo multer. Nato se posreduje na ustrezno pot, ki izvaja različne operacije shranjevanja datotek.

Inicializirajte tok GridFS

Inicializiramo tok GridFS, kot je razvidno iz spodnje kode. Tok je potreben za branje datotek iz baze podatkov in tudi za pomoč pri upodabljanju slike v brskalnik, kadar je to potrebno.

Naložite eno datoteko ali sliko

Vmesno programsko opremo za nalaganje znova uporabimo že prej.  

Opomba: Ime filese uporablja kot parameter, upload.single()  ker imamo ključ s podobnim imenom, ki nosi datoteko, poslano od odjemalca.

Naložite več datotek ali slik

Naložimo lahko tudi več datotek hkrati. Namesto tega upload.single()moramo preprosto uporabiti upload.multiple().

Opomba: Število naloženih datotek je lahko manjše od določenega števila datotek.

Pridobi vse datoteke iz zbirke podatkov

Z inicializiranim tokom lahko s pomočjo pridobimo vse datoteke v določeni zbirki podatkov gfs.find().toArray(...). Ko datoteke dobimo, jih preslikamo v matriko in pošljemo odgovor.

Pridobi eno datoteko po imenu datoteke

Poizvedovati po GridFS za eno datoteko na podlagi določenega atributa, kot je filename. S pomočjo toka GridFS lahko poizvedete bazo podatkov prek funkcije gfs.find({}).

V brskalnik upodobite pridobljeno sliko

To je nekoliko bolj zapleten del, saj morate datoteko ne samo pridobiti iz baze podatkov, temveč jo tudi upodobiti kot sliko v ustreznem brskalniku. Datoteko pridobimo normalno. V tem postopku ni sprememb.

Nato s pomočjo metode openDownloadStreamByName()v toku gfs lahko enostavno upodobimo sliko, saj vrne berljiv tok. Po tem lahko uporabimo JavaScript pipe()za pretakanje odgovora.

Izbrišite določeno datoteko po ident

Brisanje datoteke je enako enostavno. Za poizvedbo in brisanje zadevne datoteke uporabljamo metodo toka delete()s _idparametrom.

To so glavne funkcije, ki jih ponuja zasnova pomnilniškega mehanizma. Izkoristil sem razpravljane funkcije GridFS, da sem ustvaril preprosto aplikacijo za nalaganje slik. Kodo v odlagališču lahko poglobite globlje.

Zaključek

Potreboval sem nekaj časa in spodoben boj, da sem razumel, kako uporabiti GridFS za osebni projekt. Zaradi tega sem se želel prepričati, da vsaj še eni osebi ni bilo treba vložiti toliko časa.

Ob tem bi priporočal previdnost pri uporabi GridFS. To ni srebrna točka za vse vaše pomisleke glede shranjevanja datotek. Kljub temu je čudovita specifikacija, ki jo morate vedeti in se je zavedati.  

Če imate kakršna koli vprašanja ali pomisleke, lahko v prispevku komentirate ali se obrnete na mene LinkedIn.

V tem času nadaljujte s kodiranjem.