Isitoreli - indawo yokugcina ifayile

Isitoreli - indawo yokugcina ifayile

Ngaphambi kokuba ndiqale, kufuneka ndihambe ikhonkco kwinqaku elidlulileyoukuze kucace ukuba kanye kanye sithetha ngantoni.

Kule nqaku ndingathanda ukujonga uluhlu olujongene nokugcinwa kweefayile, kunye nendlela enokusetyenziswa ngayo nabani na. I-Storacle lithala leencwadi elizimeleyo, akukho nxibelelwano luthe ngqo nomculo. Ungacwangcisa ugcino lwazo naziphi na iifayile.

Kwinqaku elidlulileyo, "ndiyiqengqe umgqomo" kancinci ipfs, kodwa oku kwenzeka kanye kwimeko yengxaki endandiyicombulula. Ngokubanzi, ndicinga ukuba le projekthi ipholile. Ndikhetha nje ukukwazi ukwenza iinethiwekhi ezahlukeneyo zemisebenzi eyahlukeneyo. Oku kukuvumela ukuba ulungelelanise kakuhle isakhiwo kunye nokunciphisa umthwalo kwiindawo ezizimeleyo kunye nenethiwekhi ngokubanzi. Nangona ngaphakathi kwesakhelo seprojekthi enye, ukuba kuyimfuneko, unokwahlula inethiwekhi ibe ngamaqhekeza ngokwemiqathango ethile, ukunciphisa umthwalo jikelele.

Ngoko umgcini usebenzisa indlela Iyasasazeka ukulungiselela uthungelwano. Ezona mpawu:

  • Iifayile zingongezwa kwindawo yokugcina kuyo nayiphi na indawo.
  • Iifayile zigcinwa ngokupheleleyo, hayi kwiibhloko.
  • Ifayile nganye inomxholo wayo owodwa we-hash yomsebenzi oqhubekayo ngayo.
  • Iifayile zinokuphinda-phindwa ukwenzela ukuthembeka okukhulu
  • Inani leefayile kwindawo enye lilinganiselwe kuphela yinkqubo yefayile (kukho okungaphandle, ngaphezulu koku kungezantsi)
  • Inani leefayile kwinethiwekhi lilinganiselwe ngamakhono asasazekayo ngokwenani lee-nodes ezisebenzayo kwinethiwekhi, apho kwinguqulo yesibini iya kukwazi ukusebenza kunye nenani elingenasiphelo le-nodes (ngakumbi kule nto kwelinye inqaku)

Umzekelo olula wendlela oku kusebenza ngayo ngokubanzi kwinkqubo:

Iseva:

const  Node = require('storacle').Node;

(async () => {
  try {
    const node = new Node({
      port: 4000,
      hostname: 'localhost'
    });
    await node.init();
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

Umxhasi:

const  Client = require('storacle').Client;

(async () => {
  try {
    const client = new  Client({
      address: 'localhost:4000'
    });
    await client.init();
    const hash = await client.storeFile('./my-file');
    const link = await client.getFileLink(hash); 
    await client.removeFile(hash);
  }
  catch(err) {
    console.error(err.stack);
    process.exit(1);
  }
})();

Ngaphakathi umbono

Akukho nto inqabileyo phantsi kwe-hood. Ulwazi malunga nenani leefayile, ubukhulu bazo kunye namanye amanqaku agcinwe kwi-database yememori kwaye ahlaziywa xa iifayile zicinywa kwaye zongezwa, ngoko akukho mfuneko yokufumana rhoqo inkqubo yefayile. Ukwahlukileyo kukwenza umqokeleli wenkunkuma xa ufuna ukujikeleza iifayile xa ubungakanani obuthile bokugcina bufikelelwe, kwaye ungathinteli ukongeza ezintsha. Kule meko, kufuneka udlule ugcino, kwaye ukusebenza ngenani elikhulu leefayile (> yithi isigidi) kunokukhokelela kwimithwalo ebalulekileyo. Kwaye kungcono ukugcina iifayile ezimbalwa kwaye uqhube iindawo ezininzi. Ukuba "umcoci" ukhubazekile, ngoko akukho ngxaki enjalo.

Ugcino lwefayile luqukethe iifolda ezingama-256 kunye namanqanaba ama-2 okuzala. Iifayile zigcinwa kwiifolda zomgangatho wesibini. Oko kukuthi, ukuba kukho isigidi esi-1. Kuya kubakho malunga neefayile ezingama-62500 kwifolda nganye (1000000 / sqrt(256)).

Amagama efolda akhiwe kwi-hash yefayile ukuze ukwazi ukufikelela ngokukhawuleza ukuba uyayazi i-hash.

Esi sakhiwo sikhethwe ngokusekelwe kwinani elikhulu leemfuno ezahlukeneyo zokugcina: inkxaso kwiinkqubo zefayile ezibuthathaka, apho kunganqweneleki ukuba neefayile ezininzi kwifolda enye, ukunqumla ngokukhawuleza kwazo zonke iifolda ukuba kuyimfuneko, njl. Uhlobo oluthile lwentsingiselo yegolide.

Ugcino

Xa ufaka iifayile, kunye naxa uzifumana, amakhonkco kwiifayile abhalwa kwi-cache.
Enkosi koku, rhoqo akukho mfuneko yokunqumla inethiwekhi yonke ukukhangela ifayile. Oku kukhawulezisa ukufunyanwa kwamakhonkco kwaye kunciphisa umthwalo kwinethiwekhi. Ugcino lwedatha luyenzeka kwakhona ngokusebenzisa i-http headers.

I-isomorphy

Umxhasi ubhalwe kwi-javascript kwaye i-isomorphic, inokusetyenziswa ngokuthe ngqo kwi-browser. 
Ungalayisha ifayile https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js njengombhalo kunye nofikelelo window.ClientStoracle okanye ngenisa ngenkqubo yokwakha, njl.

Amakhonkco arhoxisiweyo

Uphawu olunika umdla lukwayi-β€œdeferred reference”. Eli likhonkco kwifayile enokufunyanwa ngokuhambelanayo, apha kwaye ngoku, kwaye ifayile iya kutsalwa xa sele ifunyenwe kwindawo yokugcina. Oku kulungele kakhulu xa, umzekelo, kufuneka ubonise imifanekiso ethile kwisayithi. Sibeka nje ikhonkco elimisiweyo kwi-src kwaye yiyo loo nto. Unokuza namatyala amaninzi.

Client API

  • async Client.prototype.storeFile() - ukugcina ifayile
  • async Client.prototype.getFileLink() β€” ukufumana ikhonkco elithe ngqo kwifayile
  • async Client.prototype.getFileLinks() β€” ukufumana uluhlu lothungelwano oluthe ngqo kwifayile kuzo zonke iindawo apho lukhoyo
  • async Client.prototype.getFileToBuffer() -fumana ifayile kwisithinteli
  • async Client.prototype.getFileToPath() β€” fumana ifayile kwisixokelelwano sefayile
  • async Client.prototype.getFileToBlob() -fumana ifayile kwiblob (yenguqulelo yebrawuza)
  • async Umxhasi.iprototype.removeFile() - cima ifayile
  • Client.prototype.createRequestedFileLink() β€” yenza ikhonkco elibazisekileyo

Thumela iifayile kwenye iseva

Ukuze uthumele iifayile kwenye indawo, unga:

  • Khuphela nje yonke ifolda yokugcina kunye nezicwangciso. (oku kungangasebenzi kwixesha elizayo)
  • Khuphela kuphela ifolda enefayile. Kodwa, kule meko, kuya kufuneka uqhube umsebenzi kube kanye node.normalizeFilesInfo()ukubala kwakhona yonke idatha kwaye uyifake kwisiseko sedatha.
  • sebenzisa umsebenzi node.exportFiles()eyakuqala ukukopa iifayile.

Iisetingi zenode ezisisiseko
Xa uqala i-node yokugcina, unokucacisa zonke izicwangciso eziyimfuneko.
Ndiza kuchaza ezona zisisiseko, ezinye zifumaneka kwiGithub.

  • ugcino.dataUbungakanani β€” ubungakanani befolda enefayile
  • storage.tempSize β€” ubungakanani befolda yethutyana
  • storage.autoCleanSize β€” ubuncinci besayizi yogcino ekufuneka ibanjwe. Ukuba ukhankanya le parameter, ngoko nje ukuba isithuba siqala ukuphela, ezona fayile zisetyenzisiweyo zincinci ziya kucinywa.
  • ifayile.maxSize β€” ubungakanani bobungakanani befayile
  • ifayile.minSize - Ubuncinci besayizi yefayile
  • ifayile.preferredDuplicates - inani elikhethiweyo lefayile ephindwe kabini kwinethiwekhi
  • file.mimeWhitelist - Iintlobo zeefayile ezisebenzayo
  • ifayile.mimeBlacklist - Iintlobo zefayile ezingasebenziyo
  • ifayile.extWhitelist -Izandiso zefayile esebenzayo
  • ifayile.extBlacklist - Izandiso zefayile ezingasebenziyo
  • file.linkCache -Izicwangciso ezahlukeneyo ze-caching zekhonkco

Phantse zonke iiparameters ezinxulumene nemilinganiselo zinokungenwa kuzo zombini ezipheleleyo kunye namaxabiso ahambelanayo.

Ukusebenza ngomgca womyalelo
Ithala leencwadi linokusetyenziswa ngelayini yomyalelo. Ukwenza oku kufuneka uyifake kwihlabathi jikelele: npm i -g isitora. Emva koku, unokuqalisa iintshukumo eziyimfuneko kuluhlu lweprojekthi apho i-node ikhoyo. Umzekelo, isitoreli -ivenkileIfayile -f ./file.txt -c ./config.jsukudibanisa ifayile. Zonke izenzo zinokufumaneka kwi https://github.com/ortexx/storacle/blob/master/bin/actions.js

Kutheni ungafuna oku?

  • Ukuba ufuna ukwenza uhlobo oluthile lweprojekthi ebekwe kwindawo apho uceba ukugcina kunye nokusebenza ngeefayile usebenzisa iindlela ezifanelekileyo. Ngokomzekelo, iprojekthi yomculo echazwe kwikhonkco ekuqaleni kwenqaku isebenzisa isitora.
  • Ukuba usebenza kuzo naziphi na ezinye iiprojekthi apho kufuneka ugcine iifayile ngendlela esasazwayo. Ungakha lula inethiwekhi yakho evaliweyo, ulungelelanise iindawo zokuhlala kwaye wongeze ezintsha xa zifuneka.
  • Ukuba ufuna nje ukugcina iifayile zakho zewebhusayithi kwenye indawo kwaye kuninzi kakhulu ukuba ubhale yonke into ngokwakho. Mhlawumbi eli thala leencwadi likufanelekele ngakumbi kunezinye kwimeko yakho.
  • Ukuba uneprojekthi osebenza kuyo ngeefayile, kodwa ufuna ukwenza konke ukukhohlisa kwisikhangeli. Unokuphepha ukubhala ikhowudi yeseva.

Abafowunelwa bam:

umthombo: www.habr.com

Yongeza izimvo