{"id":80224,"date":"2020-05-04T13:42:20","date_gmt":"2020-05-04T11:42:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov"},"modified":"2020-05-04T13:42:20","modified_gmt":"2020-05-04T11:42:20","slug":"storacle-deczentralizovannoe-hranilishhe-fajlov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 nj\u00eb magazin\u00eb e decentralizuar p\u00ebr skedar\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 nj\u00eb magazin\u00eb e decentralizuar p\u00ebr skedar\u00eb\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Para se filloj, duhet t\u00eb l\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">nj\u00eb lidhje me artikullin e m\u00ebparsh\u00ebm<\/a><\/noindex>, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb kuptohet sakt\u00ebsisht p\u00ebr \u00e7far\u00eb po flas.<\/p>\n<p><\/p>\n<p>N\u00eb k\u00ebt\u00eb artikull do t\u00eb doja t\u00eb shqyrtoj nj\u00eb shtres\u00eb q\u00eb p\u00ebrgjigjet p\u00ebr ruajtjen e skedar\u00ebve dhe si kjo mund t\u00eb p\u00ebrdoret nga kushdo. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle \u00ebsht\u00eb nj\u00eb bibliotek\u00eb e pavarur<\/a><\/noindex>, pa ndonj\u00eb lidhje direkte me muzik\u00ebn. Mund t\u00eb organizoni ruajtjen e \u00e7do skedari.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>N\u00eb artikullin e m\u00ebparsh\u00ebm, un\u00eb paksa \"kritikova\" <strong>ipfs<\/strong>, por kjo ndodhi pik\u00ebrisht n\u00eb kontekstin e detyr\u00ebs q\u00eb po zgjidhja. N\u00eb p\u00ebrgjith\u00ebsi, e konsideroj k\u00ebt\u00eb projekt t\u00eb shk\u00eblqyer. Thjesht m\u00eb p\u00eblqen m\u00eb shum\u00eb mund\u00ebsia e krijimit t\u00eb rrjeteve t\u00eb ndryshme p\u00ebr detyra t\u00eb ndryshme. Kjo lejon nj\u00eb organizim m\u00eb t\u00eb mir\u00eb t\u00eb struktur\u00ebs dhe redukton ngarkes\u00ebn n\u00eb nyjet e ve\u00e7anta dhe n\u00eb rrjetin n\u00eb t\u00ebr\u00ebsi. Madje mund t\u00eb ndajm\u00eb rrjetin n\u00eb pjes\u00eb sipas disa kritereve, duke reduktuar ngarkes\u00ebn totale.<\/p>\n<p><\/p>\n<p>Pra, storacle p\u00ebrdor mekanizmin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> p\u00ebr organizimin e rrjetit. Tiparet kryesore:<\/p>\n<p><\/p>\n<ul>\n<li>Skedar\u00ebt mund t\u00eb shtohen n\u00eb ruajtje p\u00ebrmes \u00e7do nyjeje.<\/li>\n<li>Skedar\u00ebt ruhen t\u00eb t\u00ebr\u00eb, jo n\u00eb blloqe.<\/li>\n<li>\u00c7do skedar ka nj\u00eb hash unik p\u00ebr p\u00ebrmbajtjen e tij p\u00ebr pun\u00eb t\u00eb m\u00ebtejshme.<\/li>\n<li>Skedar\u00ebt mund t\u00eb dublikohet p\u00ebr nj\u00eb besueshm\u00ebri m\u00eb t\u00eb madhe<\/li>\n<li>Numri i skedar\u00ebve n\u00eb nj\u00eb nyje \u00ebsht\u00eb i kufizuar vet\u00ebm nga sistemi i skedar\u00ebve (ka nj\u00eb p\u00ebrjashtim, p\u00ebr t\u00eb cilin do flasim m\u00eb posht\u00eb)<\/li>\n<li>Numri i skedar\u00ebve n\u00eb rrjet \u00ebsht\u00eb i kufizuar nga mund\u00ebsit\u00eb e spreadable p\u00ebr numrin e nyjeve t\u00eb lejuara n\u00eb rrjet, t\u00eb cilat n\u00eb versionin e dyt\u00eb do t\u00eb lejojn\u00eb t\u00eb punoni me nj\u00eb num\u00ebr t\u00eb pakufizuar nyjesh (p\u00ebr k\u00ebt\u00eb do flasim n\u00eb nj\u00eb artikull tjet\u00ebr)<\/li>\n<\/ul>\n<p><\/p>\n<p>Nj\u00eb shembull i thjesht\u00eb se si funksionon kjo nga programi:<\/p>\n<p><\/p>\n<p>Serveri:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const  Node = require('storacle').Node;\n\n(async () =&gt; {\n\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0const node = new Node({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0port: 4000,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0hostname: 'localhost'\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0await node.init();\n\u00a0\u00a0}\n\u00a0\u00a0catch(err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err.stack);\n\u00a0\u00a0\u00a0\u00a0process.exit(1);\n\u00a0\u00a0}\n})();<\/code><\/pre>\n<p><\/p>\n<p>Klienti:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const  Client = require('storacle').Client;\n\n(async () =&gt; {\n\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0const client = new  Client({\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0address: 'localhost:4000'\n\u00a0\u00a0\u00a0\u00a0});\n\u00a0\u00a0\u00a0\u00a0await client.init();\n\u00a0\u00a0\u00a0\u00a0const hash = await client.storeFile('.\/my-file');\n\u00a0\u00a0\u00a0\u00a0const link = await client.getFileLink(hash);\n\u00a0\u00a0\u00a0\u00a0await client.removeFile(hash);\n\u00a0\u00a0}\n\u00a0\u00a0catch(err) {\n\u00a0\u00a0\u00a0\u00a0console.error(err.stack);\n\u00a0\u00a0\u00a0\u00a0process.exit(1);\n\u00a0\u00a0}\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Nj\u00eb pamje nga brenda<\/strong><\/p>\n<p><\/p>\n<p>N\u00ebn kapak nuk ka asgj\u00eb t\u00eb jasht\u00ebzakonshme. Informacioni mbi numrin e skedar\u00ebve, madh\u00ebsin\u00eb e tyre totale dhe \u00e7\u00ebshtje t\u00eb tjera ruhet n\u00eb nj\u00eb baz\u00eb t\u00eb kujtes\u00ebs dhe azhurnohet gjat\u00eb fshirjes dhe shtimit t\u00eb skedar\u00ebve, p\u00ebr k\u00ebt\u00eb arsye nuk ka nevoj\u00eb p\u00ebr t'u drejtuar shpesh n\u00eb sistemin e skedar\u00ebve. P\u00ebrjashtim p\u00ebrb\u00ebn aktivizimi i grumbullit t\u00eb mbetjeve, kur k\u00ebrkohet qarkullimi i skedar\u00ebve kur arrihen disa madh\u00ebsi depoje, dhe jo ndalimi i shtimit t\u00eb t\u00eb rejave. N\u00eb k\u00ebt\u00eb rast, \u00ebsht\u00eb e nevojshme t\u00eb kalosh p\u00ebrmes depozit\u00ebs, dhe puna me nj\u00eb num\u00ebr t\u00eb madh skedar\u00ebsh (&gt; nj\u00eb milion, le t\u00eb themi) mund t\u00eb sjell\u00eb ngarkesa t\u00eb konsiderueshme. \u00cbsht\u00eb m\u00eb mir\u00eb t\u00eb mbash m\u00eb pak skedar\u00eb dhe t\u00eb aktivizosh m\u00eb shum\u00eb nyje. N\u00ebse \"pastruesi\" \u00ebsht\u00eb i \u00e7aktivizuar, nuk ka nj\u00eb problem t\u00eb till\u00eb.<\/p>\n<p><\/p>\n<p>Depozita e skedar\u00ebve p\u00ebrb\u00ebhet nga 256 mapa dhe 2 nivele thell\u00ebsie. Skedar\u00ebt ruhen n\u00eb mapat e nivelit t\u00eb dyt\u00eb. K\u00ebshtu, me 1 milion skedar\u00eb, \u00e7do map\u00eb e till\u00eb do t\u00eb ket\u00eb rreth 62500 cop\u00eb (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>Emrat e mapave jan\u00eb formuar nga hash-i i skedarit, p\u00ebr t\u00eb lejuar qasje t\u00eb shpejt\u00eb, me njohjen e hash-it.<\/p>\n<p><\/p>\n<p>Kjo struktur\u00eb \u00ebsht\u00eb zgjedhur duke marr\u00eb parasysh nj\u00eb num\u00ebr t\u00eb madh k\u00ebrkesash t\u00eb ndryshme p\u00ebr depozitimin: mb\u00ebshtetje p\u00ebr sisteme skedar\u00ebsh t\u00eb dobta, ku n\u00eb nj\u00eb map\u00eb nuk \u00ebsht\u00eb e d\u00ebshirueshme t\u00eb kemi shum\u00eb skedar\u00eb, kalim t\u00eb shpejt\u00eb n\u00eb t\u00eb gjitha mapat n\u00eb nevoj\u00eb, etj. Nj\u00eb mesatare e art\u00eb.<\/p>\n<p><\/p>\n<p><strong>Ke\u0161imi<\/strong><\/p>\n<p><\/p>\n<p>Kur shtohen skedar\u00eb, si dhe kur merren ata, n\u00eb ke\u0161 shkruhen lidhjet me skedar\u00ebt.<br \/>\nFal\u00eb k\u00ebsaj shpesh nuk ka nevoj\u00eb t\u00eb kalojm\u00eb gjith\u00eb rrjetin n\u00eb k\u00ebrkim t\u00eb skedarit. Kjo p\u00ebrshpejton marrjen e lidhjeve dhe zvog\u00eblon ngarkes\u00ebn n\u00eb rrjet. Gjithashtu, ke\u0161imi ndodh p\u00ebrmes drejtimeve http.<\/p>\n<p><\/p>\n<p><strong>Izomorfizmi<\/strong><\/p>\n<p><\/p>\n<p>Klienti \u00ebsht\u00eb shkruar n\u00eb javascript dhe \u00ebsht\u00eb izomorfik, mund t\u00eb p\u00ebrdoret direkt nga shfletuesi.\u00a0<br \/>\nMund t\u00eb ngarkohet nj\u00eb skedar <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/dist\/storacle.client.js<\/a><\/noindex> si skript dhe t\u00eb merret qasje n\u00eb <strong>window.ClientStoracle <\/strong>ose importohet p\u00ebrmes sistemit t\u00eb nd\u00ebrtimit etj.<\/p>\n<p><\/p>\n<p><strong>Lidhjet e vonuara<\/strong><\/p>\n<p><\/p>\n<p>Nj\u00eb ve\u00e7ori interesante \u00ebsht\u00eb gjithashtu \"lidhja e vonuar\". Kjo \u00ebsht\u00eb nj\u00eb lidhje me nj\u00eb skedar, t\u00eb cil\u00ebn mund ta marr\u00ebsh sinkronisht, k\u00ebtu dhe tani, dhe skedari do t\u00eb t\u00ebrhiqet kur t\u00eb jet\u00eb gjetur n\u00eb depo. Kjo \u00ebsht\u00eb shum\u00eb e p\u00ebrshtatshme, p\u00ebr shembull, kur duam t\u00eb tregojm\u00eb disa imazhe n\u00eb faqen e internetit. Thjesht vendosim lidhjen e vonuar n\u00eb src dhe kjo \u00ebsht\u00eb gjith\u00e7ka. Mund t\u00eb imagjinojm\u00eb shum\u00eb raste p\u00ebrdorimi.<\/p>\n<p><\/p>\n<p><strong>Api klientit<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 ruajtja e skedarit<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 marrja e lidhjes direkte p\u00ebr skedarin<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 marrja e list\u00ebs s\u00eb lidhjeve t\u00eb drejtp\u00ebrdrejta p\u00ebr skedarin nga t\u00eb gjitha nyjat ku ai ekziston<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 merr skedarin n\u00eb buffer<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 merr skedarin n\u00eb sistemin e skedar\u00ebve<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 merr skedarin n\u00eb blob (p\u00ebr versione t\u00eb shfletuesit)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 heq skedarin<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 krijo lidhje t\u00eb shtyr\u00eb<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Eksporti i skedar\u00ebve n\u00eb nj\u00eb server tjet\u00ebr<\/strong><\/p>\n<p><\/p>\n<p>P\u00ebr t\u00eb \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0438 skedar\u00eb n\u00eb nj\u00eb nyje tjet\u00ebr mund t\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>Thjesht kopjoni t\u00eb gjith\u00eb dosjen e ruajtjes s\u00eb skedar\u00ebve me konfigurimet. (n\u00eb t\u00eb ardhmen kjo mund t\u00eb mos funksionoj\u00eb)<\/li>\n<li>Kopjoni vet\u00ebm dosjen me skedar\u00ebt. Por, n\u00eb k\u00ebt\u00eb rast, do t\u00eb duhet t\u00eb ekzekutoni nj\u00eb her\u00eb funksionin <strong>node.normalizeFilesInfo()<\/strong>, p\u00ebr t\u00eb rip\u00ebrllogaritur t\u00eb dh\u00ebnat dhe p\u00ebr t'i futur n\u00eb baz\u00eb.<\/li>\n<li>P\u00ebrdorni funksionin <strong>node.exportFiles()<\/strong>, i cili do t\u00eb nis\u00eb kopjimin e skedar\u00ebve.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Cil\u00ebsimet themelore t\u00eb nyj\u00ebs<\/strong><br \/>\nDuke e nisur nyj\u00ebn e ruajtjes, mund t\u00eb p\u00ebrcaktoni t\u00eb gjitha cil\u00ebsimet e nevojshme.<br \/>\nDo t\u00eb p\u00ebrshkruaj ato m\u00eb t\u00eb r\u00ebnd\u00ebsishmet, pjesa tjet\u00ebr mund t\u00eb gjendet n\u00eb GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 madh\u00ebsia e dosjes me skedar\u00ebt<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 madh\u00ebsia e dosjes p\u00ebrkohshme<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 madh\u00ebsia minimale e ruajtjes q\u00eb duhet mbajtur. N\u00ebse p\u00ebrcaktoni k\u00ebt\u00eb paramet\u00ebr, sa her\u00eb q\u00eb nuk ka mjaft hap\u00ebsir\u00eb, skedar\u00ebt m\u00eb pak t\u00eb p\u00ebrdorur do t\u00eb hiqen.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 madh\u00ebsia maksimale e skedarit<\/li>\n<li><strong>file.minSize<\/strong> \u2014 madh\u00ebsia minimale e skedarit<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 numri preferencial i kopjeve t\u00eb skedarit n\u00eb rrjet<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 tipe t\u00eb lejuara t\u00eb skedar\u00ebve<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 tipe t\u00eb ndaluara t\u00eb skedar\u00ebve<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 zgjerime t\u00eb lejuara t\u00eb skedar\u00ebve<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 zgjerime t\u00eb ndaluara t\u00eb skedar\u00ebve<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 cil\u00ebsime t\u00eb ndryshme t\u00eb caching p\u00ebr lidhjet<\/li>\n<\/ul>\n<p><\/p>\n<p>Gati t\u00eb gjith\u00eb parametrat e lidhur me madh\u00ebsit\u00eb mund t\u00eb vendosen edhe n\u00eb vlera absolute e relative.<\/p>\n<p><\/p>\n<p><strong>Puna n\u00ebp\u00ebrmjet linj\u00ebs s\u00eb komanduese<\/strong><br \/>\nBiblioteka mund t\u00eb p\u00ebrdoret n\u00ebp\u00ebrmjet linj\u00ebs s\u00eb komanduese. P\u00ebr k\u00ebt\u00eb duhet ta instaloni at\u00eb globalisht: <strong>npm i -g storacle<\/strong>. Pas k\u00ebsaj mund t\u00eb filloni veprimet e nevojshme nga drejtorin\u00eb me projektin, ku ndodhet nyja. P\u00ebr shembull, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, p\u00ebr t\u00eb shtuar nj\u00eb skedar. T\u00eb gjitha veprimet mund t\u00eb gjenden n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js\">https:\/\/github.com\/ortexx\/storacle\/blob\/master\/bin\/actions.js<\/a><\/noindex><\/p>\n<p><\/p>\n<p><strong>P\u00ebrse mund t'ju nevojitet kjo<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>N\u00ebse d\u00ebshironi t\u00eb krijoni ndonj\u00eb projekt t\u00eb decentralizuar, n\u00eb t\u00eb cilin planifikohet ruajtja dhe punimi me skedar\u00eb n\u00eb metoda t\u00eb p\u00ebrshtatshme. P\u00ebr shembull, projekti me muzik\u00eb, i p\u00ebrshkruar n\u00eb lidhjen n\u00eb fillim t\u00eb artikullit, p\u00ebrdor <strong>storacle<\/strong>.<\/li>\n<li>N\u00ebse po punon n\u00eb projekte t\u00eb tjera ku nevojitet ruajtja e skedar\u00ebve n\u00eb m\u00ebnyr\u00eb t\u00eb shp\u00ebrndar\u00eb. Mund t\u00eb nd\u00ebrtosh leht\u00ebsisht rrjetin t\u00ebnd t\u00eb mbyllur, t\u00eb konfigurosh n\u00eb m\u00ebnyr\u00eb fleksibile nyjet dhe t\u00eb shtosh t\u00eb reja kur \u00ebsht\u00eb e nevojshme.<\/li>\n<li>N\u00ebse thjesht t\u00eb nevojitet nj\u00eb vend p\u00ebr t\u00eb ruajtur skedar\u00ebt e faqes t\u00ebnde dhe je i ngarkuar t\u00eb shkruash gjith\u00e7ka vet\u00eb. Ndoshta kjo bibliotek\u00eb do t\u00eb p\u00ebrshtatet m\u00eb mir\u00eb p\u00ebr ty.<\/li>\n<li>N\u00ebse ke nj\u00eb projekt n\u00eb t\u00eb cilin punon me skedar\u00eb, por d\u00ebshiron t\u00eb kryesh t\u00eb gjitha operacionet nga shfletuesi. Mund t\u00eb shmang\u00ebsh shkruarjen e kodit server.<\/li>\n<\/ul>\n<p><\/p>\n<p>Kontaktet e mia:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ortex\">@ortex<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"mailto:mywebstreet@gmail.com\">mywebstreet@gmail.com<\/a><\/noindex><\/li>\n<\/ul>\n<p>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499954\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043e \u0447\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0435\u0447\u044c. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043b\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432, \u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u043b\u044e\u0431\u044b\u043c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u043c. Storacle \u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 \u043c\u0443\u0437\u044b\u043a\u043e\u0439 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435\u0442. \u041c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80225,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Storacle \u2014 ruajtje e decentralizuar e skedar\u00ebve | ProHoster","description":"Para se t\u00eb filloj, duhet t\u00eb l\u00eb.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Storacle \u2014 \u0434\u0435\u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0443, \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-05-04T11:42:20+00:00","article:modified_time":"2020-05-04T11:42:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80224","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-09-27 20:25:26","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}