写点什么

IPFS 星际传输协议的入门 (二)

用户头像
AIbot
关注
发布于: 2020 年 04 月 29 日
IPFS 星际传输协议的入门(二)

IPFS在Node.js程序中使用方法

一个极简的演示程序

const all = require('it-all')
const IPFS = require('ipfs-http-client')
const ipfs = IPFS('http://localhost:5001')
function readFile(name) {
return new Promise((resolve, reject) => {
require('fs').readFile(name,{encoding: 'utf-8'},(err,data)=>{
if(err) reject(err)
resolve(data)
})
})
}
async function main () {
const version = await ipfs.version()
console.log('Version:', version.version)
con = await readFile('./abc.txt')
try{
await (ipfs.files.write(
path= '/hello.txt',
content= Buffer.from(con),
{create: true}
))}catch (err){throw err}
console.log(`ipfs.files.write 文件buffer流到节点失败抛出错误`)
var buff = await all(ipfs.files.read('/hello.txt'))
console.log(`ipfs.files.read 读取文件的数据流到本地后进行string化输出结果为:\n${buff.toString()}`)
var stat = await (ipfs.files.stat('/hello.txt'))
var abcCid = stat.cid.toString()
var cidReader = await all(ipfs.files.read('/ipfs/'+abcCid))
console.log(`ipfs.files.stat获取到文件的信息中的cid实例后将他通过cid地址拼接的方式实现另一种方式的数据读取:\n`,cidReader.toString())
try{
await ipfs.files.mkdir(
path = '/my/beautiful/images',
{parents:true}
)}catch(err){throw err}
console.log(`ipfs.files.mkdir 新建一个文件夹失败会抛出错误`)
var ls = await all(ipfs.files.ls('/'))
console.log(`ipfas.files.ls 根目录的情况打印`,ls,`打印结束\n`)
}
// QmTQxi3W8cX37CGRe4NaN6rYLJ21WEU342uoHJ7cuGgmZa
main()



三种IPFS存储文件方法介绍



ipfs.dag方式为直接以JSON文本格式固定信息到IPFS上的方法。

ipfs.files方式为将文件固定到IPFS的方法,模拟LInux文件管理。

ipfs方式为将文件固定到IPFS的方法,是ipfs.files的底层实现。

记录信息最多的方法 ipfs.dag

const cid = await ipfs.dag.put({})将一段object直接放到节点上,并返回该节点的cid

const content = (await ipfs.dag.get(cid)).value 从节点上获取cid的实际值并读取

最方便的方法 ipfs.files

await ipfs.files.write(path='',content='',{create:true}) 异步的创建一个文件。(不用await这样就能完成异步操作)

await ipfs.files.mkdir(path='',{parents: true}) 异步创建一个文件夹。(不用

await这样就能完成异步操作)

await ipfs.rm(path='',{recursive: true}) 异步的删除一个文件夹或文件,。(不用

await这样就能完成异步操作)



看看就算了的方法 ipfs

const addCid = await all(ipfs.add({path: '', content:''})) 异步的方式新增一个文件,返回的是asyncList 需要all 方法, 使用起来容易和ipfs.files.write混淆。

const catContent = await all(ipfs.cat(addCid[0])) 异步的方式读取一个文件,返回的是asyncList需要all。

const lsContent = await all(ipfs.ls(addCid[0])) 异步的方式读取目录或文件,返回的是asyncList需要all。

const getContent = await all(ipfs.get(addCid[0])) 异步的方式读取目录或文件,如果是文件比ls多一个文件内容总体来说和ls没有太多差别。返回的是asyncList 需要all。



注意:

  1. 这里的删除并不是真的从区块链上删除了只是取消了alias和实际文件地址(hash value )之间的关

联;alias不再可以访问数据,但是hash value地址仍然可以访问数据。

  1. const stat = ipfs.files.stat('/') 异步的读取当前文件或者文件夹的状态;不是一个一部列表不需要all也不能用for await。

  2. const content = await all(ipfs.files.read('/')) async和await方法读取一个文件的数据; 如果不用这种方法还可以这样读取。

var contents

for await (const con of ipfs.files.read('/'))=>{

contents.push(con)

}



相关链接

[js-ipfs中文官网](https://js.ipfs.io/zh-CN/)

[js-ipfs参考手册](https://github.com/ipfs/js-ipfs/blob/master/docs/core-api/FILES.md)



发布于: 2020 年 04 月 29 日阅读数: 107
用户头像

AIbot

关注

西风不起, 东风赐祚 2020.04.10 加入

默默无闻的CODER

评论

发布
暂无评论
IPFS 星际传输协议的入门(二)