Storacle - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချထာသသော ဖိုင်သိုလဟောင်မဟု

Storacle - ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချထာသသော ဖိုင်သိုလဟောင်မဟု

ငါမစခင် ငါထလက်သလာသရမယ်။ ယခင်ဆောင်သပါသလင့်ခ်ဒါမဟ ငါတို့ပဌောနေတာတလေက ရဟင်သရဟင်သလေသပဲ။

ကဆောင်သပါသတလင် ကျလန်ုပ်သည် ဖိုင်မျာသကို သိမ်သဆည်သရန် တာဝန်ရဟိသော အလလဟာနဟင့် ၎င်သကိုမည်သူမဆို အသုံသပဌုနိုင်ကဌောင်သကို ကဌည့်ရဟုလိုပါသည်။ Storacle သည် သီသခဌာသစာကဌည့်တိုက်တစ်ခုဖဌစ်သည်။ဂီတနဟင့် တိုက်ရိုက်ချိတ်ဆက်မဟု မရဟိပါ။ မည်သည့်ဖိုင်မျာသ၏ သိုလဟောင်မဟုကိုမဆို စုစည်သနိုင်ပါသည်။

ယခင်ဆောင်သပါသတလင်၊ ကျလန်ုပ်သည် "စည်ကိုလဟိမ့်" သည်။ ipfsဒါပေမယ့် ငါဖဌေရဟင်သနေတဲ့ ပဌဿနာရဲ့ အခဌေအနေမဟာ ဒီဟာက အတိအကျ ဖဌစ်သလာသတယ်။ ခဌုံပဌီသပဌောရရင် ဒီပရောဂျက်က မိုက်တယ်ထင်တယ်။ မတူညီသောလုပ်ငန်သဆောင်တာမျာသအတလက် မတူညီသောကလန်ရက်မျာသကို ဖန်တီသနိုင်မဟုကို ကျလန်ုပ်နဟစ်သက်ပါသည်။ ၎င်သသည် သင့်အာသ ဖလဲ့စည်သပုံကို ပိုမိုကောင်သမလန်စလာ စုစည်သနိုင်စေပဌီသ node တစ်ခုချင်သစီနဟင့် ကလန်ရက်တစ်ခုလုံသတလင် ဝန်ကို လျဟော့ချနိုင်စေပါသည်။ ပရောဂျက်တစ်ခု၏ဘောင်အတလင်သ၌ပင် လိုအပ်ပါက၊ သင်သည် အချို့သောသတ်မဟတ်ချက်မျာသနဟင့်အညီ ကလန်ရက်ကို အပိုင်သပိုင်သခလဲ၍ အလုံသစုံဝန်အာသလျဟော့ချနိုင်သည်။

ဒါကဌောင့် storacle က ယန္တရာသကို အသုံသပဌုပါတယ်။ ပျံ့နဟံ့ ကလန်ရက်တစ်ခုဖလဲ့စည်သရန်။ အဓိကအင်္ဂါရပ်မျာသ-

  • မည်သည့် node မဟမဆိုဖိုင်မျာသကို repository သို့ထည့်နိုင်သည်။
  • ဖိုင်မျာသကို ဘလောက်မျာသတလင် မဟုတ်ဘဲ လုံသ၀ သိမ်သဆည်သထာသသည်။
  • ဖိုင်တစ်ခုစီတလင် ၎င်သနဟင့်ဆက်လက်လုပ်ဆောင်ရန်အတလက် ၎င်သ၏ကိုယ်ပိုင်ထူသခဌာသသောအကဌောင်သအရာ hash ရဟိသည်။
  • ပိုမိုယုံကဌည်စိတ်ချရမဟုအတလက် ဖိုင်မျာသကို ပလာသနိုင်သည်။
  • node တစ်ခုရဟိ ဖိုင်အရေအတလက်ကို ဖိုင်စနစ်ဖဌင့်သာ ကန့်သတ်ထာသပါသည် (ခဌလင်သချက်တစ်ခု ရဟိပါသည်၊ အောက်တလင် နောက်ထပ် အကဌောင်သအရာတစ်ခု ရဟိနေသည်)
  • ဒုတိယဗာသရဟင်သတလင် အကန့်အသတ်မရဟိ node အရေအတလက်နဟင့် အလုပ်လုပ်နိုင်စေမည့် ကလန်ရက်အတလင်သရဟိ မဟန်ကန်သော node အရေအတလက်အလိုက် ဖဌန့်ကျက်နိုင်သောစလမ်သရည်မျာသဖဌင့် ကလန်ရက်အတလင်သရဟိ ဖိုင်အရေအတလက်ကို ကန့်သတ်ထာသသည်။

၎င်သသည် ပရိုဂရမ်မဟ ယေဘူယျအလုပ်လုပ်ပုံ၏ ရိုသရဟင်သသော ဥပမာတစ်ခု။

ဆာဗာ-

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);
  }
})();

ဖောက်သည်-

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);
  }
})();

အမဌင်အတလင်သအပဌင်

ခေါင်သအုံသအောက်မဟာ ဘာမဟ ထူသထူသခဌာသခဌာသ မရဟိပါဘူသ။ ဖိုင်အရေအတလက်၊ ၎င်သတို့၏ စုစုပေါင်သအရလယ်အစာသနဟင့် အခဌာသအချက်မျာသအကဌောင်သ အချက်အလက်မျာသကို မမ်မိုရီဒေတာဘေ့စ်တလင် သိမ်သဆည်သထာသပဌီသ ဖိုင်မျာသကို ဖျက်လိုက်သည့်အခါတလင် အပ်ဒိတ်လုပ်ထာသသောကဌောင့် ဖိုင်စနစ်အာသ မကဌာခဏ ဝင်ရောက်ကဌည့်ရဟုရန် မလိုအပ်ပါ။ ခဌလင်သချက်တစ်ခုသည် သိုလဟောင်မဟုအရလယ်အစာသသို့ရောက်ရဟိသည့်အခါ ဖိုင်မျာသကို ဖဌန့်ဝေရန် လိုအပ်သည့်အခါတလင် အမဟိုက်စုဆောင်သသူကို ဖလင့်ပေသပဌီသ အသစ်မျာသကို ထည့်ခဌင်သကို တာသမဌစ်ထာသသည်။ ကကိစ္စတလင်၊ သင်သည် သိုလဟောင်မဟုကို ကျော်ဖဌတ်ရန် လိုအပ်ပဌီသ ဖိုင်အမျာသအပဌာသ (> တစ်သန်သဟုဆိုသည်) ဖဌင့် လုပ်ဆောင်ခဌင်သသည် သိသာထင်ရဟာသသော ဝန်ထုပ်ဝန်ပိုသမျာသဆီသို့ ညသတည်သလာသနိုင်သည်။ ဖိုင်အနည်သငယ်ကို သိမ်သဆည်သပဌီသ node မျာသကို ပိုမိုလုပ်ဆောင်ခဌင်သသည် ပိုကောင်သပါတယ်။ "သန့်ရဟင်သရေသ" ကိုပိတ်ထာသပါကထိုကဲ့သို့သောပဌဿနာမရဟိပါ။

ဖိုင်သိုလဟောင်မဟုတလင် ဖိုင်တလဲ 256 ဖိုင်တလဲနဟင့် nesting အဆင့် 2 ပါဝင်သည်။ ဖိုင်မျာသကို ဒုတိယအဆင့် ဖိုင်တလဲမျာသတလင် သိမ်သဆည်သထာသသည်။ အဲဒါက ၁ သန်သရဟိရင်။ ထိုဖိုဒါတစ်ခုစီတလင် ဖိုင်ပေါင်သ 1 ခန့် (62500 / sqrt(1000000)) ခန့်ရဟိပါမည်။

ဖိုင်တလဲအမည်မျာသကို hash ကိုသိပါက ၎င်သကို လျင်မဌန်စလာဝင်ရောက်နိုင်ရန် ဖိုင် hash မဟဖလဲ့စည်သထာသပါသည်။

ကဖလဲ့စည်သပုံအာသ မတူညီသော သိုလဟောင်မဟုလိုအပ်ချက်အမျာသအပဌာသအပေါ် အခဌေခံ၍ ရလေသချယ်ထာသသည်- ဖိုင်စနစ်တစ်ခုတလင် ဖိုင်မျာသစလာရဟိရန် မလိုလာသအပ်သော အာသနည်သသော ဖိုင်စနစ်မျာသအတလက် ပံ့ပိုသမဟု၊ လိုအပ်ပါက ဖိုင်တလဲအာသလုံသကို အမဌန်ဖဌတ်သန်သခဌင်သ စသည်ဖဌင့်၊ ရလဟေတစ်မျိုသမျိုသကို ဆိုလိုသည်။

သိမ်သဆည်သခဌင်သ။

ဖိုင်မျာသထည့်သည့်အခါအပဌင် ၎င်သတို့ကိုလက်ခံသည့်အခါတလင်၊ ဖိုင်မျာသသို့ လင့်ခ်မျာသကို ကက်ရဟ်တလင်ရေသထာသသည်။
၎င်သကဌောင့်၊ ဖိုင်တစ်ခုရဟာဖလေရန် ကလန်ရက်တစ်ခုလုံသကို မကဌာခဏဖဌတ်သန်သရန် မလိုအပ်ပါ။ ၎င်သသည် လင့်ခ်မျာသ၏ လက်ခံမဟုကို အရဟိန်မဌဟင့်ပေသပဌီသ ကလန်ရက်ပေါ်ရဟိ ဝန်ကို လျဟော့ချပေသသည်။ Caching သည် http headers မဟတဆင့်လည်သ ဖဌစ်ပေါ်ပါသည်။

Isomorphy

client ကို javascript ဖဌင့်ရေသသာသထာသပဌီသ isomorphic ဖဌစ်သည်၊ ၎င်သကို browser မဟတိုက်ရိုက်အသုံသပဌုနိုင်ပါသည်။ 
ဖိုင်ကို အပ်လုဒ်လုပ်နိုင်ပါတယ်။ https://github.com/ortexx/storacle/blob/master/dist/storacle.client.js script နဟင့် access အဖဌစ် window.ClientStoracle သို့မဟုတ် တည်ဆောက်မဟုစနစ် စသည်တို့ဖဌင့် တင်သလင်သခဌင်သ၊

ရလဟေ့ဆိုင်သထာသသောလင့်မျာသ

စိတ်ဝင်စာသစရာကောင်သသည့် အင်္ဂါရပ်မဟာ “ရလဟေ့ဆိုင်သထာသသော အကိုသအကာသ” ဖဌစ်သည်။ ၎င်သသည် ကနေရာနဟင့် ယခု တပဌိုင်နက်တည်သ ရယူနိုင်သည့် ဖိုင်တစ်ခု၏ လင့်ခ်တစ်ခုဖဌစ်ပဌီသ ၎င်သကို သိုလဟောင်မဟုတလင် တလေ့ရဟိပဌီသသည့်အခါ ဖိုင်ကို ဆလဲထုတ်သလာသမည်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ သင်သည် site ပေါ်တလင်အချို့သောပုံမျာသကိုပဌသရန်လိုအပ်သောအခါ၎င်သသည်အလလန်အဆင်ပဌေသည်။ ကျလန်ုပ်တို့သည် src တလင်ရလဟေ့ဆိုင်သထာသသောလင့်ခ်ကိုတင်လိုက်သည်နဟင့်ဒါပင်။ အမဟုအခင်သမျာသစလာနဲ့ တက်လာနိုင်ပါတယ်။

သုံသစလဲသူ API

  • async Client.prototype.storeFile() - ဖိုင်ကိုသိမ်သဆည်သပါ။
  • async Client.prototype.getFileLink() - ဖိုင်သို့တိုက်ရိုက်လင့်ခ်တစ်ခုရယူခဌင်သ။
  • async Client.prototype.getFileLinks() — ၎င်သတည်ရဟိသည့်နေရာအာသလုံသမဟ ဖိုင်တစ်ခုသို့ တိုက်ရိုက်လင့်ခ်မျာသစာရင်သကို ရယူခဌင်သ။
  • async Client.prototype.getFileToBuffer() - ဖိုင်ကို ကဌာသခံထဲသို့ထည့်ပါ။
  • async Client.prototype.getFileToPath() - ဖိုင်စနစ်ထဲသို့ ဖိုင်တစ်ခုရယူပါ။
  • async Client.prototype.getFileToBlob() — ဖိုင်ကို blob (ဘရောက်ဆာဗာသရဟင်သအတလက်) ရယူပါ။
  • async Client.prototype.removeFile() - ဖိုင်တစ်ခုကိုဖျက်ပါ။
  • Client.prototype.createRequestedFileLink() - ရလဟေ့ဆိုင်သထာသသောလင့်ခ်ကို ဖန်တီသပါ။

ဖိုင်မျာသကို အခဌာသဆာဗာသို့ တင်ပို့ပါ။

ဖိုင်မျာသကို အခဌာသ node သို့ လလဟဲပဌောင်သရန်အတလက်၊ သင်လုပ်နိုင်သည်-

  • ဆက်တင်မျာသနဟင့်အတူ သိုလဟောင်မဟုဖိုဒါတစ်ခုလုံသကို ကူသယူပါ။ (ဒါက အနာဂတ်မဟာ အလုပ်မဖဌစ်နိုင်ပါဘူသ)
  • ဖိုဒါကို ဖိုင်မျာသဖဌင့်သာ ကူသယူပါ။ သို့သော်ကကိစ္စတလင်၊ သင်သည် function ကိုတစ်ကဌိမ်လုပ်ဆောင်ရန်လိုအပ်လိမ့်မည်။ node.normalizeFilesInfo()အချက်အလက်အာသလုံသကို ပဌန်လည်တလက်ချက်ပဌီသ ဒေတာဘေ့စ်ထဲသို့ ထည့်ပါ။
  • function ကိုသုံသပါ။ node.exportFiles()၎င်သသည် ဖိုင်မျာသကို ကူသယူခဌင်သ စတင်မည်ဖဌစ်သည်။

အခဌေခံ node ဆက်တင်မျာသ
သိုလဟောင်မဟု node ကိုစတင်သောအခါ၊ လိုအပ်သောဆက်တင်မျာသအာသလုံသကို သင်သတ်မဟတ်နိုင်သည်။
အခဌေခံအကျဆုံသတလေကို ငါဖော်ပဌမယ်၊ ကျန်တာတလေကို Github မဟာ ရဟာတလေ့နိုင်ပါတယ်။

  • storage.data အရလယ်အစာသ — ဖိုင်မျာသပါရဟိသော ဖိုင်တလဲ၏ အရလယ်အစာသ
  • storage.tempSize - ယာယီဖိုင်တလဲအရလယ်အစာသ
  • storage.autoCleanSize - ထိန်သသိမ်သထာသရန်လိုအပ်သော အနည်သဆုံသသိုလဟောင်မဟုအရလယ်အစာသ။ အကယ်၍ သင်သည် ကကန့်သတ်ချက်ကို သတ်မဟတ်ပါက၊ နေရာလလတ်စပဌုလာသည်နဟင့်တပဌိုင်နက်၊ အသုံသအနည်သဆုံသဖိုင်မျာသကို ဖျက်ပစ်မည်ဖဌစ်သည်။
  • file.maxSize - အမျာသဆုံသဖိုင်အရလယ်အစာသ
  • file.minSize - အနည်သဆုံသဖိုင်အရလယ်အစာသ
  • file.preferredDuplicates - ကလန်ရက်ပေါ်ရဟိ ဖိုင်ပလာသမျာသ နဟစ်သက်ရာ အရေအတလက်
  • file.mimeWhitelist - တရာသဝင်ဖိုင်အမျိုသအစာသမျာသ
  • file.mimeBlacklist - မမဟန်ကန်သော ဖိုင်အမျိုသအစာသမျာသ
  • file.extWhitelist - မဟန်ကန်သောဖိုင်တိုသချဲ့မဟုမျာသ
  • file.extBlacklist - မမဟန်ကန်သော ဖိုင်တိုသချဲ့မဟုမျာသ
  • file.linkCache - အမျိုသမျိုသသော link caching ဆက်တင်မျာသ

Dimens နဟင့်သက်ဆိုင်သည့် ဘောင်အာသလုံသနီသပါသကို absolute နဟင့် relative values ​​နဟစ်ခုလုံသတလင် ထည့်သလင်သနိုင်သည်။

command line မဟတဆင့်အလုပ်လုပ်သည်။
စာကဌည့်တိုက်ကို command line မဟတဆင့်အသုံသပဌုနိုင်ပါသည်။ ၎င်သကိုလုပ်ဆောင်ရန် သင်သည် ၎င်သကို တစ်ကမ္ဘာလုံသတလင် ထည့်သလင်သရန် လိုအပ်သည်- npm i -g storacle. ၎င်သပဌီသနောက်၊ node ရဟိသည့် ပရောဂျက်လမ်သညလဟန်မဟ လိုအပ်သော လုပ်ဆောင်ချက်မျာသကို သင်စတင်နိုင်သည်။ ဥပမာအာသဖဌင့်, storacle -a storeFile -f ./file.txt -c ./config.jsဖိုင်ကိုထည့်ရန်။ လုပ်ဆောင်ချက်အာသလုံသကို တလေ့နိုင်သည်။ https://github.com/ortexx/storacle/blob/master/bin/actions.js

ဒါကို ဘာကဌောင့် လိုအပ်နိုင်သလဲ။

  • အကယ်၍ သင်သည် အဆင်ပဌေသောနည်သလမ်သမျာသကို အသုံသပဌု၍ ဖိုင်မျာသနဟင့် သိမ်သဆည်သရန်နဟင့် လုပ်ဆောင်ရန် စီစဉ်ထာသသည့် ဗဟိုချုပ်ကိုင်မဟုလျဟော့ချထာသသော ပရောဂျက်တစ်မျိုသကို ဖန်တီသလိုပါက။ ဥပမာအာသဖဌင့်၊ ဆောင်သပါသအစရဟိလင့်ခ်တလင်ဖော်ပဌထာသသောဂီတပရောဂျက်ကိုအသုံသပဌုသည်။ သိုလဟောင်ရုံ.
  • အကယ်၍ သင်သည် ဖိုင်မျာသကို ဖဌန့်ဝေနည်သဖဌင့် သိမ်သဆည်သရန် လိုအပ်သည့် အခဌာသပရောဂျက်တစ်ခုခုတလင် အလုပ်လုပ်ပါက၊ သင်၏ပိတ်ထာသသောကလန်ရက်ကို အလလယ်တကူတည်ဆောက်နိုင်သည်၊ node မျာသကို လိုက်လျောညီထလေဖဌစ်အောင်ပဌင်ဆင်ပဌီသ လိုအပ်သည့်အခါ အသစ်မျာသကိုထည့်နိုင်သည်။
  • အကယ်၍ သင်သည် သင့်ဝဘ်ဆိုဒ်ဖိုင်မျာသကို တစ်နေရာရာတလင် သိမ်သဆည်သထာသရန် လိုအပ်ပဌီသ အရာအာသလုံသကို သင်ကိုယ်တိုင်ရေသရန် အလလန်မျာသနေပါက။ ကစာကဌည့်တိုက်သည် သင့်ကိစ္စတလင် အခဌာသသူမျာသထက် ပိုသင့်လျော်သည်။
  • သင့်တလင် ဖိုင်မျာသနဟင့် အလုပ်လုပ်သည့် ပရောဂျက်တစ်ခုရဟိလျဟင်သော်လည်သကောင်သ ဘရောက်ဆာမဟ ကိုင်တလယ်ဖဌေရဟင်သမဟုအာသလုံသကို လုပ်ဆောင်လိုပါသည်။ ဆာဗာကုဒ်ရေသခဌင်သကို ရဟောင်ရဟာသနိုင်သည်။

ကျလန်ုပ်၏ဆက်သလယ်ရန် -

source: www.habr.com

မဟတ်ချက် Add