{"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\/ro\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","title":{"rendered":"Storacle \u2014 un depozit de fi\u0219iere descentralizat","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Storacle \u2014 un depozit de fi\u0219iere descentralizat\" src=\"\/wp-content\/uploads\/2020\/05\/333f7b998e00ce32367d97f7ccd05bef.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00cenainte de a \u00eencepe, trebuie s\u0103 las <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/495058\/\">un link c\u0103tre articolul anterior<\/a><\/noindex>, pentru a fi clar despre ce discut\u0103m.<\/p>\n<p><\/p>\n<p>\u00cen acest articol, a\u0219 dori s\u0103 discut despre stratul care se ocup\u0103 cu stocarea fi\u0219ierelor \u0219i cum poate fi folosit de oricine. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/storacle\/\">Storacle \u2013 o bibliotec\u0103 autonom\u0103<\/a><\/noindex>, f\u0103r\u0103 leg\u0103tur\u0103 direct\u0103 cu muzica. Poate organiza stocarea oric\u0103ror fi\u0219iere.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u00cen articolul anterior, am men\u021bionat u\u0219or despre <strong>ipfs<\/strong>, dar aceasta a fost \u00een contextul sarcinii pe care o abordam. \u00cen general, consider c\u0103 acest proiect este grozav. \u00cemi place mai mult posibilitatea de a crea re\u021bele diferite pentru sarcini diferite. Acest lucru permite o mai bun\u0103 organizare a structurii \u0219i reduce sarcina pe nodurile individuale \u0219i pe re\u021bea \u00een ansamblu. Chiar \u0219i \u00een cadrul unui anumit proiect, dac\u0103 este necesar, se poate sparge re\u021beaua \u00een p\u0103r\u021bi pe anumite criterii, reduc\u00e2nd astfel sarcina general\u0103.<\/p>\n<p><\/p>\n<p>Deci, storacle folose\u0219te un mecanism <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ortexx\/spreadable\">spreadable<\/a><\/noindex> pentru organizarea re\u021belei. Principalele caracteristici:<\/p>\n<p><\/p>\n<ul>\n<li>Fi\u0219ierele pot fi ad\u0103ugate \u00een stocare prin orice nod.<\/li>\n<li>Fi\u0219ierele sunt salvate integral, nu pe blocuri.<\/li>\n<li>Fiecare fi\u0219ier are un hash unic bazat pe con\u021binut pentru lucrul ulterior cu acesta.<\/li>\n<li>Fi\u0219ierele pot fi duplicate pentru mai mult\u0103 fiabilitate<\/li>\n<li>Num\u0103rul de fi\u0219iere pe un nod este limitat doar de sistemul de fi\u0219iere (exist\u0103 o excep\u021bie, despre care vom discuta mai jos)<\/li>\n<li>Num\u0103rul de fi\u0219iere din re\u021bea este limitat de capacit\u0103\u021bile spreadable \u00een ceea ce prive\u0219te num\u0103rul de noduri acceptabile \u00een re\u021bea, care \u00een a doua versiune vor putea permite lucrul cu un num\u0103r infinit de noduri (despre aceasta, \u00eentr-un alt articol)<\/li>\n<\/ul>\n<p><\/p>\n<p>Un exemplu simplu despre cum func\u021bioneaz\u0103 din program:<\/p>\n<p><\/p>\n<p>Serverul:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Node = require('storacle').Node;\n\n(async () =&gt; {\n  try {\n    const node = new Node({\n      port: 4000,\n      hostname: 'localhost'\n    });\n    await node.init();\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p>Client:<\/p>\n<p><\/p>\n<pre><code class=\"javascript\">const Client = require('storacle').Client;\n\n(async () =&gt; {\n  try {\n    const client = new Client({\n      address: 'localhost:4000'\n    });\n    await client.init();\n    const hash = await client.storeFile('.\/my-file');\n    const link = await client.getFileLink(hash);\n    await client.removeFile(hash);\n  }\n  catch(err) {\n    console.error(err.stack);\n    process.exit(1);\n  }\n})();<\/code><\/pre>\n<p><\/p>\n<p><strong>Privire de interior<\/strong><\/p>\n<p><\/p>\n<p>Sub capot\u0103 nu este nimic supranatural. Informa\u021biile despre num\u0103rul de fi\u0219iere, dimensiunea total\u0103 a acestora \u0219i alte detalii sunt stocate \u00eentr-o baz\u0103 de date in-memory \u0219i sunt actualizate la eliminarea \u0219i ad\u0103ugarea fi\u0219ierelor, astfel c\u0103 nu este necesar s\u0103 se acceseze frecvent sistemul de fi\u0219iere. O excep\u021bie o constituie activarea colectorului de gunoi, c\u00e2nd este necesar\u0103 circula\u021bia fi\u0219ierelor la atingerea unor dimensiuni specifice ale stoc\u0103rii, nu restric\u021bia ad\u0103ug\u0103rii de fi\u0219iere noi. \u00cen acest caz, este nevoie s\u0103 parcurgem stocarea, iar lucrul cu un num\u0103r mare de fi\u0219iere (&gt; un milion, de exemplu) poate genera sarcini considerabile. Este mai bine s\u0103 p\u0103str\u0103m mai pu\u021bine fi\u0219iere \u0219i s\u0103 pornim mai multe noduri. Dac\u0103 \u201ecur\u0103\u021b\u0103torul\u201d este dezactivat, atunci nu exist\u0103 aceast\u0103 problem\u0103.<\/p>\n<p><\/p>\n<p>Stocarea fi\u0219ierelor const\u0103 \u00een 256 de dosare \u0219i 2 niveluri de imbricare. Fi\u0219ierele sunt p\u0103strate \u00een dosare de nivelul secundar. Deci, \u00een cazul \u00een care exist\u0103 1 milion de fi\u0219iere, \u00een fiecare astfel de dosar vor fi aproximativ 62500 de fi\u0219iere (1000000 \/ sqrt(256)).<\/p>\n<p><\/p>\n<p>Numele dosarelor sunt generate din hash-ul fi\u0219ierului, pentru a permite accesul rapid, \u0219tiind hash-ul.<\/p>\n<p><\/p>\n<p>Aceast\u0103 structur\u0103 a fost aleas\u0103 \u021bin\u00e2nd cont de un num\u0103r mare de cerin\u021be diferite pentru stocare: suport pentru sisteme de fi\u0219iere slabe, unde nu este recomandat s\u0103 ai multe fi\u0219iere \u00eentr-un singur dosar, parcurgere rapid\u0103 a tuturor dosarelor, etc. O anumit\u0103 solu\u021bie de compromis.<\/p>\n<p><\/p>\n<p><strong>Cache<\/strong><\/p>\n<p><\/p>\n<p>Atunci c\u00e2nd se adaug\u0103 fi\u0219iere, precum \u0219i la ob\u021binerea acestora, linkurile c\u0103tre fi\u0219iere sunt scrise \u00een cache.<br \/>\nDatorit\u0103 acestui fapt, de multe ori nu este necesar s\u0103 se traverseze \u00eentreaga re\u021bea c\u0103ut\u00e2nd fi\u0219ierul. Acest lucru accelereaz\u0103 ob\u021binerea linkurilor \u0219i reduce \u00eenc\u0103rc\u0103tura asupra re\u021belei. De asemenea, cache-ul se realizeaz\u0103 prin intermediul headerelor http.<\/p>\n<p><\/p>\n<p><strong>Izomorfism<\/strong><\/p>\n<p><\/p>\n<p>Clientul este scris \u00een javascript \u0219i este izomorf, poate fi utilizat direct din browser.\u00a0<br \/>\nSe poate \u00eenc\u0103rca un fi\u0219ier <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> ca script \u0219i se poate accesa <strong>window.ClientStoracle <\/strong>sau poate fi importat prin sistemul de construire etc.<\/p>\n<p><\/p>\n<p><strong>Linkuri am\u00e2nate<\/strong><\/p>\n<p><\/p>\n<p>O caracteristic\u0103 interesant\u0103 este \u0219i \u201elinkul \u00eent\u00e2rziat\u201d. Acesta este un link c\u0103tre un fi\u0219ier, pe care \u00eel putem ob\u021bine sincron, aici \u0219i acum, iar fi\u0219ierul se va desc\u0103rca c\u00e2nd va fi g\u0103sit \u00een stocare. Este foarte convenabil, de exemplu, c\u00e2nd trebuie s\u0103 afi\u0219\u0103m pe site anumite imagini. Pur \u0219i simplu folosim un link \u00eent\u00e2rziat \u00een src \u0219i este totul. Se pot inventa multe cazuri.<\/p>\n<p><\/p>\n<p><strong>Api client<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>async <strong>Client.prototype.storeFile()<\/strong> \u2014 salvarea fi\u0219ierului<\/li>\n<li>async <strong>Client.prototype.getFileLink()<\/strong> \u2014 ob\u021binerea unui link direct c\u0103tre fi\u0219ier<\/li>\n<li>async <strong>Client.prototype.getFileLinks()<\/strong> \u2014 ob\u021binerea unei liste de linkuri directe c\u0103tre fi\u0219ier de pe toate nodurile unde acesta exist\u0103<\/li>\n<li>async <strong>Client.prototype.getFileToBuffer()<\/strong> \u2014 ob\u021bine fi\u0219ierul \u00een buffer<\/li>\n<li>async <strong>Client.prototype.getFileToPath()<\/strong> \u2014 ob\u021bine fi\u0219ierul \u00een sistemul de fi\u0219iere<\/li>\n<li>async <strong>Client.prototype.getFileToBlob()<\/strong> \u2014 ob\u021bine fi\u0219ierul \u00een blob (pentru versiunea browser)<\/li>\n<li>async <strong>Client.prototype.removeFile()<\/strong> \u2014 elimin\u0103 fi\u0219ierul<\/li>\n<li><strong>Client.prototype.createRequestedFileLink()<\/strong> \u2014 creeaz\u0103 un link \u00eent\u00e2rziat<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Exportul fi\u0219ierelor pe un alt server<\/strong><\/p>\n<p><\/p>\n<p>Pentru a muta fi\u0219ierele pe un alt nod, po\u021bi:<\/p>\n<p><\/p>\n<ul>\n<li>S\u0103 copiezi \u00eentreaga folder de stocare \u00eempreun\u0103 cu set\u0103rile. (\u00een viitor, acest lucru poate s\u0103 nu mai func\u021bioneze)<\/li>\n<li>S\u0103 copiezi doar folderul cu fi\u0219iere. Dar, \u00een acest caz, va fi necesar s\u0103 rulezi o dat\u0103 func\u021bia <strong>node.normalizeFilesInfo()<\/strong>, pentru a recalcula toate datele \u0219i a le introduce \u00een baza de date.<\/li>\n<li>Folosind func\u021bia <strong>node.exportFiles()<\/strong>, care va \u00eencepe copierea fi\u0219ierelor.<\/li>\n<\/ul>\n<p><\/p>\n<p><strong>Set\u0103rile principale ale nodului<\/strong><br \/>\nAtunci c\u00e2nd porne\u0219ti nodul de stocare, po\u021bi specifica toate set\u0103rile necesare.<br \/>\nVoi descrie cele mai importante, restul poate fi g\u0103sit pe GitHub.<\/p>\n<p><\/p>\n<ul>\n<li><strong>storage.dataSize<\/strong> \u2014 dimensiunea folderului cu fi\u0219iere<\/li>\n<li><strong>storage.tempSize<\/strong> \u2014 dimensiunea folderului temporar<\/li>\n<li><strong>storage.autoCleanSize<\/strong> \u2014 dimensiunea minim\u0103 a stoc\u0103rii care trebuie men\u021binut\u0103. Dac\u0103 acest parametru este specificat, atunci imediat ce spa\u021biul \u00eencepe s\u0103 fie insuficient, cele mai pu\u021bin folosite fi\u0219iere vor fi \u0219terse.<\/li>\n<li><strong>file.maxSize<\/strong> \u2014 dimensiunea maxim\u0103 a fi\u0219ierului<\/li>\n<li><strong>file.minSize<\/strong> \u2014 dimensiunea minim\u0103 a fi\u0219ierului<\/li>\n<li><strong>file.preferredDuplicates<\/strong> \u2014 num\u0103rul preferat de duplicate ale fi\u0219ierului \u00een re\u021bea<\/li>\n<li><strong>file.mimeWhitelist<\/strong> \u2014 tipurile de fi\u0219iere acceptate<\/li>\n<li><strong>file.mimeBlacklist<\/strong> \u2014 tipurile de fi\u0219iere neacceptate<\/li>\n<li><strong>file.extWhitelist<\/strong> \u2014 extensiile de fi\u0219iere acceptate<\/li>\n<li><strong>file.extBlacklist<\/strong> \u2014 extensiile de fi\u0219iere neacceptate<\/li>\n<li><strong>file.linkCache<\/strong> \u2014 diverse set\u0103ri pentru cache-ul linkurilor<\/li>\n<\/ul>\n<p><\/p>\n<p>Aproape to\u021bi parametrii lega\u021bi de dimensiuni pot fi specifica\u021bi at\u00e2t \u00een unit\u0103\u021bi absolute, c\u00e2t \u0219i relative.<\/p>\n<p><\/p>\n<p><strong>Lucrul prin linia de comand\u0103<\/strong><br \/>\nBiblioteca poate fi utilizat\u0103 prin linia de comand\u0103. Pentru asta, trebuie s\u0103 o instalezi global: <strong>npm i -g storacle<\/strong>. Dup\u0103 aceea, po\u021bi lansa ac\u021biunile dorite din directorul cu proiectul, unde se afl\u0103 nodul. De exemplu, <strong>storacle -a storeFile -f .\/file.txt -c .\/config.js<\/strong>, pentru a ad\u0103uga un fi\u0219ier. Toate ac\u021biunile pot fi g\u0103site \u00een <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>De ce ai avea nevoie de asta<\/strong><\/p>\n<p><\/p>\n<ul>\n<li>Dac\u0103 vrei s\u0103 creezi un proiect descentralizat \u00een care se preconizeaz\u0103 stocarea \u0219i lucrul cu fi\u0219iere prin metode convenabile. De exemplu, proiectul cu muzic\u0103, descris \u00een linkul de la \u00eenceputul articolului, folose\u0219te <strong>storacle<\/strong>.<\/li>\n<li>Dac\u0103 lucrezi la alte proiecte unde trebuie s\u0103 stochezi fi\u0219iere \u00een mod distribuit, po\u021bi construi cu u\u0219urin\u021b\u0103 o re\u021bea privat\u0103, configur\u00e2nd flexibil nodurile \u0219i ad\u0103ug\u00e2nd altele noi atunci c\u00e2nd este necesar.<\/li>\n<li>Dac\u0103 ai nevoie doar s\u0103 stochezi fi\u0219ierele site-ului t\u0103u \u0219i nu vrei s\u0103 scrii totul de la zero, aceast\u0103 bibliotec\u0103 ar putea fi mai potrivit\u0103 dec\u00e2t altele \u00een cazul t\u0103u.<\/li>\n<li>Dac\u0103 ai un proiect \u00een care lucrezi cu fi\u0219iere, dar dore\u0219ti s\u0103 efectuezi toate manipul\u0103rile din browser, po\u021bi evita scrierea codului server.<\/li>\n<\/ul>\n<p><\/p>\n<p>Contactele mele:<\/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>Sursa: <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.1 - 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\/ro\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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 stocare de fi\u0219iere descentralizat\u0103 | ProHoster","description":"\u00cenainte s\u0103 \u00eencep, trebuie s\u0103 las.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/storacle-deczentralizovannoe-hranilishhe-fajlov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/80224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=80224"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/80224\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/80225"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=80224"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=80224"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=80224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}