GridFS útmutató: Fájlok és képek feltöltése a MongoDB-re a Node egyszerű használatával

A fájlok tárolása fontos folyamat, amelyre különféle típusú alkalmazásoknál több folyamat szükséges. Az olyan folyamatok megléte, mint Content Delivery Networks (CDNs)a harmadik féltől származó felhőbeállítások, például az Amazon Web Services, és a helyi fájltárolási lehetőségek, mindig megkönnyítették egy ilyen szolgáltatás kiépítését.

Azonban az a koncepció, hogy a fájlokat egyetlen API-híváson keresztül közvetlenül adatbázisba tárolom, már jó ideje érdekelt. Itt jött a képbe számomra a GridFS.

GridFS - laikusok megértése

A MongoDB rendelkezik egy GridFS nevű illesztőprogram-specifikációval a fájlok feltöltésére és visszakeresésére. A GridFS lehetővé teszi fájlok tárolását és visszakeresését, beleértve azokat is, amelyek meghaladják a BSON-dokumentum 16 MB-os méretkorlátját .

A GridFS alapvetően egy fájlt vesz fel, és több darabra bontja, amelyeket külön dokumentumokként két gyűjteményben tárolnak:

  • - a chunkgyűjtemény (tárolja a dokumentumrészeket), és
  • a filegyűjtemény (az ebből következő további metaadatokat tárolja).

Minden darab 255 KB méretű. Ez azt jelenti, hogy az utolsó darab általában vagy egyenlő vagy kisebb, mint 255 KB. Elég rendesen hangzik.

Amikor a GridFS-ről olvas, a meghajtó szükség szerint összeszereli az összes darabot. Ez azt jelenti, hogy a fájl szakaszait a lekérdezési tartománynak megfelelően olvashatja el. Ilyen például egy audiofájl egy szegmensének meghallgatása vagy egy videofájl egy szakaszának lehívása.  

Megjegyzés: A 16 MB-os méretkorlátot meghaladó fájlok tárolásához előnyösebb a GridFS használata. Kisebb fájlok esetén a BinData formátum használata ajánlott a fájlok egyetlen dokumentumokban történő tárolásához.

Ez összefoglalja a GridFS működését általában. Ideje belemeríteni a lábunkat egy működő kódba, és megtudni, hogyan lehet egy rendszert megvalósítani.

Elég beszéd, mutasd meg a kódot

A Node.js-t használjuk a MongoDB felhőalapú példányához való hozzáféréssel a beállításhoz. A minta alkalmazás kódtárát itt találja.

tarique93102 / gridfs-file-storage Hozzájárulás a tarique93102 / gridfs-file-storage fejlesztéséhez egy fiók létrehozásával a GitHub-on. tarique93102 GitHub

Teljes mértékben a kód azon részeire fogunk összpontosítani, amelyek a GridFS funkcionalitására vonatkoznak. Megtanuljuk, hogyan kell beállítani, és hogyan lehet fájlokat tárolni, fájlokat vagy egy adott fájlt visszakeresni és egy adott fájlt törölni. Kezdjük akkor.

Inicializálja a tárolómotort

A motor inicializálásához szükséges csomagok multer-gridfs-storageés multer. method-overrideKözepes szoftvert is használunk a fájlok törlési műveletének engedélyezéséhez. Az npm modul cryptoa fájlnevek titkosítására szolgál, amikor az adatbázisból tárolják és elolvassák őket.

Miután a GridFS-t használó tárolómotor inicializálva van, csak a multer köztes programmal kell hívnia. Ezután továbbítja a megfelelő fájl tárolási műveleteket végrehajtó megfelelő útvonalnak.

A GridFS-adatfolyam inicializálása

Inicializáljuk a GridFS adatfolyamot, az alábbi kód szerint. Az adatfolyamra a fájlok adatbázisból való kiolvasásához és a kép böngészőbe történő visszaadásához van szükség.

Töltsön fel egyetlen fájlt vagy képet

Újra felhasználjuk a korábban létrehozott feltöltési köztes szoftvert.  

Megjegyzés: A nevet fileparaméterként használják, upload.single()  mivel nálunk van egy hasonló nevű kulcs, amely az ügyféltől küldött fájlt hordozza.

Töltsön fel több fájlt vagy képet

Több fájlt is feltölthetünk egyszerre. Ehelyett upload.single()egyszerűen használnunk kell upload.multiple().

Megjegyzés: A feltöltött fájlok száma kevesebb lehet, mint a megadott fájlok száma.

Az összes fájl lekérése az adatbázisból

Az inicializált adatfolyam segítségével az adott adatbázis összes fájlját lehívhatjuk gfs.find().toArray(...). A fájlok megszerzése után leképezzük egy tömbre, és elküldjük a választ.

Egyetlen fájl letöltése fájlnév szerint

Nagyon egyszerű lekérdezni a GridFS-t egyetlen fájlról egy adott attribútum alapján, például filename. A GridFS adatfolyam segítségével lekérdezheti az adatbázist a függvényen keresztül gfs.find({}).

Töltsön le egy letöltött képet a böngészőben

Ez egy kicsit bonyolultabb rész, mivel nem csak be kell töltenie egy fájlt az adatbázisból, hanem képpé kell tennie a megfelelő böngészőben. A fájlt rendesen lekérjük. Nincs változás ebben a folyamatban.

Ezután openDownloadStreamByName()a gfs stream metódusának segítségével könnyedén megjeleníthetünk egy képet, mivel az visszaad egy olvasható adatfolyamot. Ezt követően a JavaScript használatával pipe()továbbíthatjuk a választ.

Egy adott fájl törlése azonosító szerint

A fájl törlése ugyanolyan egyszerű. Mi használjuk a folyam módszer delete()a _idparaméter lekérdezés, és törölje az érintett fájlt.

Ezeket a fő funkciókat kínálja a tároló motor kialakítása. Kihasználtam a megvitatott GridFS szolgáltatásokat, hogy létrehozzak egy egyszerű képfeltöltő alkalmazást. Mélyebben elmélyedhet a tárban található kódban.

Következtetés

Időbe és tisztességes küzdelembe telt, mire megértettem, hogyan használhatom a GridFS-t egy személyes projekthez. Emiatt szerettem volna megbizonyosodni arról, hogy legalább egy másik személynek nem kell ugyanannyi időt befektetnie.

Ennek ellenére azt javaslom, hogy a GridFS-t óvatosan használja. Ez nem ezüst golyó az összes fájltárolási aggodalomra nézve. Ennek ellenére remek specifikáció, amelyet ismerni és tisztában kell lenni.  

Ha bármilyen kérdése vagy aggálya van, megjegyzést fűzhet a bejegyzéshez, vagy fordulhat hozzám LinkedIn.

Addig is folytassa a kódolást.