Stocarea fișierelor este o caracteristică importantă necesară în mai multe procese din diferite tipuri de aplicații. Existența unor procese precum Content Delivery Networks (CDNs), configurat prin opțiuni cloud terță parte, cum ar fi Amazon Web Services, iar opțiunile de stocare a fișierelor locale au facilitat întotdeauna construirea unei astfel de caracteristici.

Cu toate acestea, conceptul de stocare a fișierelor direct într-o bază de date printr-un singur apel API mă intriga de ceva timp. Acolo a intrat GridFS în imagine pentru mine.

Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB
Probabil că nu este cea mai bună modalitate de a implementa un sistem de stocare a fișierelor

GridFS – Înțelegerea unui profan

MongoDB are o specificație a driverului pentru încărcarea și preluarea fișierelor din acesta, numită GridFS. GridFS vă permite să stocați și să preluați fișiere, inclusiv cele care depășesc limita de dimensiune a documentului BSON 16 MB.

GridFS ia practic un fișier și îl împarte în mai multe bucăți care sunt stocate ca documente individuale în două colecții:

  • chunk Colectie (stochează părțile documentului) și
  • file Colectie (stochează metadatele suplimentare corespunzătoare).

Fiecare bucată este limitată la 255 KB. Aceasta înseamnă că ultima bucată este, în mod normal, egală cu 255 KB sau mai mică. Sună destul de îngrijit.

Când citiți din GridFS, șoferul reasamblează toate bucățile după cum este necesar. Aceasta înseamnă că puteți citi secțiuni ale unui fișier conform intervalului dvs. de interogare. Cum ar fi ascultarea unui segment al unui fișier audio sau preluarea unei secțiuni a unui fișier video.

Notă: Este preferabil să utilizați GridFS pentru stocarea fișierelor care depășesc în mod normal limita de 16 MB. Pentru fișierele mai mici, se recomandă utilizarea formatului BinData pentru a stoca fișierele în documente unice.

Aceasta rezumă modul în care funcționează GridFS în general. Este timpul să ne scufundăm picioarele într-un cod de lucru și să vedem cum să implementăm un sistem ca atare.

Destul de vorbit, arată-mi codul

Pentru configurarea noastră folosim Node.js cu acces la o instanță cloud a MongoDB. Aici puteți găsi depozitul de coduri pentru aplicația mostră.

tarique93102 / gridfs-file-storage
Contribuiți la dezvoltarea tarique93102 / gridfs-file-storage prin crearea unui cont pe GitHub.
Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Ne vom concentra complet pe segmente de cod care se referă la funcționalitățile GridFS. Vom învăța cum să-l configurăm și să-l folosim pentru a stoca fișiere, a prelua fișiere sau a unui anumit fișier și a șterge un anumit fișier. Să începem atunci.

Inițializați motorul de stocare

Pachetele necesare pentru inițializarea motorului sunt multer-gridfs-storage și multer. De asemenea, folosim method-override middleware pentru a activa operația de ștergere pentru fișiere. Modulul npm crypto este folosit pentru a cripta numele fișierelor la stocarea și citirea din baza de date.

Odată ce motorul de stocare care utilizează GridFS este inițializat, trebuie să îl apelați doar folosind middleware-ul multer. Este apoi trecut la ruta respectivă executând diferite operațiuni de stocare a fișierelor.

1611650525 758 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Inițializați fluxul GridFS

Inițializăm un flux GridFS așa cum se vede în codul de mai jos. Fluxul este necesar pentru a citi fișierele din baza de date și, de asemenea, pentru a ajuta la redarea unei imagini către un browser atunci când este necesar.

1611650525 224 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Încărcați un singur fișier sau imagine

Reutilizăm middleware-ul de încărcare pe care l-am creat mai devreme.

Notă: Numele file este folosit ca parametru în upload.single() deoarece avem cheia cu un nume similar care transportă fișierul trimis de la client.

1611650525 682 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Încărcați mai multe fișiere sau imagini

De asemenea, putem încărca mai multe fișiere simultan. In loc de upload.single(), trebuie să folosim pur și simplu upload.multiple(<number of files>).

Notă: Numărul de fișiere încărcate poate fi mai mic decât numărul definit de fișiere.

1611650525 283 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Preluați toate fișierele din baza de date

Folosind fluxul inițializat putem prelua toate fișierele din baza de date particulară folosind gfs.find().toArray(...). Odată ce fișierele sunt obținute, le mapăm la o matrice și expediem răspunsul.

1611650525 221 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Obțineți un singur fișier după numele fișierului

Este foarte simplu să interogați GridFS pentru un singur fișier pe baza unui anumit atribut cum ar fi filename. Folosind fluxul GridFS, puteți interoga baza de date prin intermediul funcției gfs.find({<add query here>}).

1611650525 910 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Redați o imagine preluată în browser

Aceasta este o parte ușor mai dificilă, deoarece nu numai că trebuie să preluați un fișier din baza de date, ci și să îl redați ca imagine în browserul respectiv. Preluăm fișierul în mod normal. Nicio schimbare în acest proces.

Apoi cu ajutorul metodei openDownloadStreamByName() pe fluxul gfs, putem reda cu ușurință o imagine deoarece returnează un flux lizibil. După ce am făcut acest lucru, putem folosi JavaScript pipe() pentru a transmite în flux răspunsul.

1611650526 631 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Ștergeți un fișier special după cod

Ștergerea unui fișier este la fel de simplă. Folosim metoda fluxului delete() cu _id parametru pentru interogarea și ștergerea fișierului în cauză.

1611650526 564 Ghid GridFS Cum sa incarcati fisiere si imagini pe MongoDB

Acestea sunt principalele funcționalități oferite de designul motorului de stocare. Utilizasem funcțiile GridFS discutate pentru a crea o aplicație simplă de încărcare a imaginilor. Puteți aprofunda codul în depozitar.

Concluzie

Mi-a luat ceva timp și o luptă decentă pentru a înțelege cum să folosesc GridFS pentru un proiect personal. Din această cauză, am vrut să mă asigur că cel puțin o altă persoană nu trebuie să investească aceeași perioadă de timp.

Acestea fiind spuse, aș recomanda utilizarea GridFS cu precauție. Nu este un glonț de argint la toate problemele legate de stocarea fișierelor. Totuși, este o specificație minunată de știut și de conștientizat.

Dacă aveți întrebări sau nelămuriri, puteți să comentați în postare sau să mă contactați LinkedIn.

Între timp, continuați să codificați.