αα»αααααααα»αα
αΆααααααΎα αααα»αααααΌαααα
αΆαα
αα
αα
αααα»αα’αααααααααααα»αα
αααα·αα·αααααΎααααααΆαααααααα½ααα»αααααΌααααα»αααΆααααααΆαα»αα―αααΆα αα·ααααααααααΆα’αΆα
ααααΎααΆααααααααΆααααΆααα
αα αααα»αα’ααααααα»ααααα»αααΆα "αααααα»α" ααααα·α ipfsααα»ααααααΏααααααΆαααΎαα‘αΎααααΆαααΆααααΆαααα αααα»αααα·αααααααα αΆααααααα»ααααα»ααααααααΆαα ααα»ααα αααα»ααα·αααΆαααααααααααα’ααααααα αααα»αααααΆααααα αΌαα α·ααααααααααΆααααα»αααΆααααααΎααααααΆαααααααααααΆαααααΆαααα·α αα ααΆαααααααα αααα’αα»ααααΆαα±ααα’ααααααα ααα ααΆααααααααααΆααααααΎαααΆααα»α αα·αααΆαααααααααΆααααα»ααα ααΎααααΆααααΈαα½αα αα·ααααααΆαααΆααααΌαα ααΌααααΈαααα αααα»αααααααααααααααααααα½α ααΎα αΆαααΆα α α’αααα’αΆα ααααααααααΆααα ααΆααααααααΆααααααααα·αα·α αααααα½αα ααα½α αααααΆαααααααααααα»αααΆααααΌαα
ααΌα
αααα storacle ααααΎααααααΆα
- α―αααΆαα’αΆα ααααΌαααΆααααααααα ααααΆααααΆααααααααΆααααΆαα½αα
- α―αααΆαααααΌαααΆααααααΆαα»αααΆαααααα»α αα·αααααα αααα»ααααα»αααα
- α―αααΆαααΈαα½ααααΆα hash ααΆαα·ααΆααααΆαααααα½αααααααΆαααααΆααααΆαααΆααααααααααααΆαα½αααΆα
- α―αααΆαα’αΆα ααααΌαααΆαα αααααααααΆααααΆαααΏααΆααααΆααααα αααΎα
- α ααα½αα―αααΆααα ααΎααααΆαααα½αααααΌαααΆαααααααααααααααααααα―αααΆαααα»ααααα (ααΆαααααΈααΎαααα ααααααααΎαααααΆαααααα)
- α ααα½αα―αααΆααα αααα»ααααααΆαααααΌαααΆααααααααααααααααΆααααα’αΆα ααααααααααΆαααΆαααααα ααΆαα ααα½αααααΆαααααααΆααα»ααααΆααα αααα»ααααααΆα ααααα αααα»αααααααΈααΈαααΉαα’αΆα ααααΎααΆαααΆαα½αα ααα½αααααΆααααααΆαααααα (ααααααααΎααααα αααα»αα’ααααααα½ααααααααα)
α§ααΆα αααααΆαααααααααααααααΆααααΎαααΆαααΆααΌαα ααΈαααααα·ααΈα
αααΆαααΈαααα
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);
}
})();
αα·αααααΆαααΆααααα»α
αα·αααΆαα’αααΈα’ααα αΆααααα ααααααααααΆααααα ααααααΆαα’αααΈα ααα½αα―αααΆα ααα αααα»α αα·αα ααα»α ααααααααααααΌαααΆααααααΆαα»ααααα»αααΌαααααΆααα·αααααααααα»αα’αααα αα αΆα α αΎαααααΌαααΆαααααΎαα αα α»ααααααααΆααα ααααααα―αααΆαααααΌαααΆααα»α αα·ααααααα ααΌα αααααα·αα αΆαααΆα αα αΌαααααΎααααααααα―αααΆαααΉαααΆαααααααα ααααΈααΎαααααα½ααααα»αααΎαααααΎαααΆαα’ααααααααΌαααααΆα αα ααααααα’αααααααΌαααΆαα ααα αΆαα―αααΆα αα ααααααααα ααααα»αααΆααααΆαααα½αααααΌαααΆαααΆαααα αα·ααα·αα αΆαααΆααααΆαααααααα―αααΆαααααΈα αααα»αααααΈαααα’αααααααΌαααααααΆααααΆααααα»αα αΎαααΆαααααΎααΆαααΆαα½αα―αααΆααα½αα ααα½ααα (> αα·ααΆαααΆαα½αααΆα) α’αΆα ααΆαα±ααααΆαααααα»αααααΆαααα α αΎαααΆααΆααΆααααααΎααααα»αααΆααααααΆαα»αα―αααΆααα·α ααΆααα»α αα·αααααΎαααΆαααααΆαααααααααααα ααααα·αααΎ "α’ααααααα’αΆα" ααααΌαααΆααα·αααααα·αααΆααααα αΆααααααααα
ααΆααααα»αα―αααΆαααΆα 256 αα αα·α 2 ααααα·αααααΆαααΆαααααα»αα α―αααΆαααααΌαααΆααααααΆαα»ααααα»αααααααα·αααΈααΈαα αααααΊααααα·αααΎααΆα 1 ααΆαα ααΆααΉαααΆαα―αααΆααααα αα 62500 αα αααα»αααααΈαα½αα (1000000 / sqrt(256)) α
αααααβααβααααΌαβααΆαβαααααΎαβα‘αΎαβααΈβα―αααΆαβ hash ααΌα ααααβα’αααβα’αΆα βα αΌαβααααΎβααΆβααΆαβαααΆαβααΏαβααααα·αβααΎβα’αααβααααΆααβ hash α
αα ααΆαααααααααααααΌαααΆαααααΎαααΎααααααα’ααααΎαααααΌαααΆααααα»αααααααααααΆααΆα αααΎαα ααΆαααΆαααααααααΆααααααααααα―αααΆαααααα αααααΆαα·αα ααααΆαα―αααΆαα αααΎααααα»ααααααα½α ααΆαααααααΆαααα ααααααααΆααα’ααααααα·αααΎα αΆαααΆα αααα αααααααααααααααΆαααΆαα
ααααΆαααααααΆαα
αα
αααααααααα―αααΆα ααααΌα
ααΆαα
αααααα½αααΆ αααααααΆαααα
α―αααΆαααααΌαααΆαααααααα
ααΆααααααΆαααααααΆααα
α’ααα»αα
αααααααα αΆααα ααΆααΉαααΆαααα·αα
αΆαααΆα
αααααααΆαααααααΆαααΆααααΌααααα»αααΆααααααααα―αααΆαααα ααΆαααααΎαααααΏαααααΆαααα½αααα αα·αααΆαααααααααΆααααα»ααα
ααΎαααααΆαα ααααΆαααααααΆααααααΎαα‘αΎαααΆααααααααααΆ http α
α’ααΈααΌαααΌα αααΈ
αααΆαααΈααααααααααΌαααΆααααααααΆ javascript α αΎαααΆ isomorphic ααΆα’αΆα
ααααΌαααΆαααααΎαααααααΆααααΈαααααα·ααΈαα»αααα
α’αααα’αΆα
αααα»αα―αααΆαα‘αΎα
ααααααααΆααα
αααααααα·ααααα½αα±ααα αΆααα’αΆαααααααα½αααΊ "α―αααΆαααααααααΆααα" αααααα αααααΊααΆαααααααΆαααα ααΆααα―αααΆααααα’αΆα ααα½αααΆααααα»ααααααααΆαααααΆ αα ααΈααα αα·αα₯α‘αΌαααα α αΎαα―αααΆαααΉαααααΌαααΆαααΆαα‘αΎααα ααααααααΆααααΌαααΆαααααΎααα½α α αΎααα αααα»ααααααααααα»αα αααααΊααΆααααα½αααΆαααα ααααααα§ααΆα ααα α’αααααααΌααααα αΆαααΌαααΆααα½αα ααα½ααα ααΎααα αααααα ααΎαααααΆααααααΆααααααααααΆααααα»α src α αΎααααααΆααΆα α’αααα’αΆα ααααΆαα½αααααΈααΆα αααΎαα
API α’αα·αα·αα
- α’ααααΆα Client.prototype.storeFile() - αααααΆαα»αα―αααΆα
- α’ααααΆα Client.prototype.getFileLink() - ααα½αααΆααααααααΆαααα ααΆααα―αααΆα
- α’ααααΆα Client.prototype.getFileLinks() - ααα½αααΆααααααΈαααααααΆαααα ααΆααα―αααΆαααΈααααΆααααΆααα’αααααααΆααΆα
- α’ααααΆα Client.prototype.getFileToBuffer() - ααα―αααΆααα αααα»αααα·ααααααα’αΆαααα
- α’ααααΆα Client.prototype.getFileToPath() - ααα―αααΆααα αααα»αααααααααα―αααΆα
- α’ααααΆα Client.prototype.getFileToBlob() - ααα½αααΆαα―αααΆααα αααα»α blob (αααααΆαααααααααααα·ααΈαα»ααα)
- α’ααααΆα Client.prototype.removeFile() - αα»αα―αααΆα
- Client.prototype.createRequestedFileLink() - αααααΎαααααααααΆααα
ααΆαα ααα―αααΆααα αααΆαααΈαααααααααααα
ααΎααααΈαααααα―αααΆααα ααααΆαααααααααα α’αααα’αΆα α
- ααααΆααααα ααααααα―αααΆααααα»αααΆααααΌααα½αααΆαα½αααΉαααΆααααααα (ααΆα’αΆα ααΉααα·αααααΎαααΆαααΆαααα’ααΆαα)
- α ααααααααααΆαα½αα―αααΆαα ααα»αααααααα»αααααΈααα α’αααααΉαααααΌαααααΎαααΆααα»αααΆααααα node.normalizeFilesInfo()ααΎααααΈααααΆα‘αΎααα·αααΌααα·ααααααααΆααα’αα α αΎααααα αΌαααΆαα αααα»αααΌαααααΆααα·ααααααα
- ααααΎαα»αααΆα node.exportFiles()αααααΉαα αΆααααααΎαα ααααα―αααΆαα
ααΆααααααααααΆααααΌαααααΆα
αα
αααα
αΆααααααΎαααααΆαααααα»α α’αααα’αΆα
αααααΆααααΆααααααα
αΆαααΆα
αααΆααα’ααα
αααα»αααΉααααααΆα’αααΈααΌαααααΆααααα»α α’αααΈααααα
αααα’αΆα
ααααΌαααΆαααααΎααα
ααΎ Github α
- ααα ααααα»ααα·αααααα - ααα ααααααααααΆαα―αααΆα
- storage.tempSize - ααα αααααααααα’αΆαααα
- storage.autoCleanSize - ααα ααααα»αα’αααααααΆαααααααΌαααΆααααααΆα ααααα·αααΎα’ααααααααΆαααααΆαααΆααααααααα αααααααΆαααα ααααααααα ααααααα αΆααααααΎαα’αα α―αααΆααααααααΎαα·α αααα»αααΉαααααΌαααΆααα»αα
- file.maxSize - ααα αα―αααΆαα’αα·ααααΆ
- file.minSize - ααα αα―αααΆαα’αααααααΆ
- file.preferred αααα½α - α ααα½αααααααα α·αααααα―αααΆααααα½ααα ααΎαααααΆα
- file.mime αααααΈα - ααααααα―αααΆαααααΉαααααΌαα
- file.mimeBlacklist - ααααααα―αααΆααα·αααααΉαααααΌα
- file.ext αααααΈα - αααααααααααα―αααΆαααααΉαααααΌαα
- file.ext αααααΈαααα - αααααααααααα―αααΆααα·αααααΉαααααΌα
- file.linkCache - ααΆααααααααααΆαααααααΆααααααααααα
ααααΎαααααααααααΆαααΆαααααααααααΆααααααΉααα·ααΆαααα’αΆα ααααΌαααΆααααα αΌαααΆαααααααααΆα αααΆα αα·αααααααααααΆααααα
ααααΎααΆαααΆαααααααααΆααααΆααααααααΆ
αααααΆαααα’αΆα
ααααΌαααΆαααααΎααΆαααααααααΆααααΆααααααααΆα ααΎααααΈααααΎααΌα
αααα’αααααααΌαααα‘αΎαααΆααΆαααα npm i -g storacle. αααααΆααααΈααα α’αααα’αΆα
α
αΆααααααΎααααααααΆαα
αΆαααΆα
αααΈαααααααααααααααΆαααααα·ααα
α α§ααΆα ααα, storacle -a storeFile -f ./file.txt -c ./config.jsααΎααααΈααααααα―αααΆαα αααααααΆαααΆααα’ααα’αΆα
ααααΆααα
αααα»α
α ααα»α’αααΈααΆαααΆα’ααααααα ααααΆααααΌαααΆαααΆ?
- ααααα·αααΎα’αααα αααααααΎααααααααα·ααααααΆααα½αα ααα½ααααα’αααααΆααααααααααααΆαα»α αα·αααααΎααΆαααΆαα½αα―αααΆααααααααΎαα·ααΈααΆαααααααΆααααα½αα α§ααΆα ααα αααααααααααααΈαααααΆααα·αααααΆαα αααα»ααααααααΆαααα ααΎαα’αααααααααΎ αααααααααα»ααα»α.
- ααααα·αααΎα’αααααααΎααΆαααΎαααααααααααααααααα’αααααααΌαααΆααααααΆαα»αα―αααΆααααα»αααααααα ααα αΆαα α’αααα’αΆα αααααΎααααααΆααα·αααααα’αααααΆααααΆαααΆααααα½α ααααααα ααΆααααααααααααΆαααααααΆααααααα αα·ααααααααααααΆαααααΈαα αααα αΆαααΆα αα
- ααααα·αααΎα’αααααααΆααααααααΌαααΆααααααΆαα»αα―αααΆαααα αααααααααα’ααααα ααααααααΆαα½α α αΎαααΆα αααΎαααααααααΆααα’ααααααα»αααΆααααααα’αααΈααααααααΆαααααααα½αα―αα αααα ααβααΆβαααααΆαααβαααβαααααα·ααβααΆαβα’αααβαααααβαααβαααα»αβααααΈβααααβα’αααα
- ααααα·αααΎα’αααααΆααααααααααα’αααααααΎααΆαααΆαα½αα―αααΆα ααα»ααααα ααα’αα»ααααα§ααΆαααααΆααα’ααααΈαααααα·ααΈαα»αααα α’αααα’αΆα αααααΆαααΆααααααααΌααααΆαααΈαααα
ααααΆαααααααααα»αα
ααααα: www.habr.com