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
chunk
zbiranje (shranjuje dokument deli), in file
zbirka (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.

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-storage
in multer
. Uporabljamo tudi method-override
vmesno programsko opremo, da omogočimo operacijo brisanja datotek. Modul npm crypto
se 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 file
se 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 _id
parametrom.

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.