请选择 进入手机版 | 继续访问电脑版
开启辅助访问
QQ登录|微信登录|登录 |立即注册

盖茨网区块链技术社区

基于js-ipfs-api实现ipfs的文件上传与下载

配置本地的ipfs节点

ipfs官网:https://ipfs.io/
下载地址:https://dist.ipfs.io/#go-ipfs

  1. # 初始化ipfs节点
  2. ipfs init
  3. # 运行ipfs节点
  4. ipfs daemon
复制代码

更多配置可参考:
https://ipfs.io/docs/getting-started/
https://hacpai.com/article/1511015097370
http://liyuechun.org/2017/11/20/ipfs-blockchain/

使用js-ipfs-api调用ipfs服务

连接本地ipfs节点

  1. const ipfsAPI = require('ipfs-api');
  2. const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'});
复制代码

本地文件上传到ipfs,并获取hash

  1. ipfs.add(fs.readFileSync(path), function (err, files) {
  2.      if (err || typeof files == "undefined") {
  3.          console.log(err);
  4.      } else {
  5.          console.log(files);
  6.      }
  7. })
复制代码

通过hash从ipfs获取数据,并保存为本地文件

  1. ipfs.get(hash,function (err,files) {
  2.      if (err || typeof files == "undefined") {
  3.          console.log(err);
  4.      } else {
  5.          console.log(files);
  6.      }
  7. })
复制代码
使用promise进行封装调用

ipfsFile.js

  1. const ipfsAPI = require('ipfs-api');
  2. const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'});

  3. exports.add = (buffer) =>{
  4.     return new Promise((resolve,reject)=>{
  5.         try {
  6.             ipfs.add(buffer, function (err, files) {
  7.                 if (err || typeof files == "undefined") {
  8.                     reject(err);
  9.                 } else {
  10.                     resolve(files[0].hash);
  11.                 }
  12.             })
  13.         }catch(ex) {
  14.             reject(ex);
  15.         }
  16.     })
  17. }
  18. exports.get = (hash) =>{
  19.     return new Promise((resolve,reject)=>{
  20.         try{
  21.             ipfs.get(hash,function (err,files) {
  22.                 if (err || typeof files == "undefined") {
  23.                     reject(err);
  24.                 }else{
  25.                     resolve(files[0].content);
  26.                 }
  27.             })
  28.         }catch (ex){
  29.             reject(ex);
  30.         }
  31.     });
  32. }
复制代码
index.js
  1. const ipfsFile = require('./ipfsFile');
  2. const fs = require('fs');

  3. //操作文件
  4. let addPath = "./storage/add/onepiece.jpg";
  5. let getPath = "./storage/get/onepiece.jpg";
  6. let buff = fs.readFileSync(addPath);
  7. ipfsFile.add(buff).then((hash)=>{
  8.     console.log(hash);
  9.     console.log("http://localhost:8080/ipfs/"+hash);
  10.     return ipfsFile.get(hash);
  11. }).then((buff)=>{
  12.     fs.writeFileSync(getPath,buff);
  13.     console.log("file:"+getPath);
  14. }).catch((err)=>{
  15.     console.log(err);
  16. })

  17. //操作内容
  18. let User = {
  19.     "name":"naruto",
  20.     "age":23,
  21.     "level":"ss"
  22. };
  23. buff = Buffer.from(JSON.stringify(User));
  24. ipfsFile.add(buff).then((hash)=>{
  25.     console.log(hash);
  26.     console.log("http://localhost:8080/ipfs/"+hash);
  27.     return ipfsFile.get(hash);
  28. }).then((buff)=>{
  29.     let obj = JSON.parse(buff.toString('utf-8'));
  30.     console.log(obj);
  31. }).catch((err)=>{
  32.     console.log(err);
  33. })
复制代码

文本哈希值:QmRfhWo4c24MWYXLxu69FcJBnKpmnjY9mN5nMiK8U9zNxB
ipfs官方网关:https://ipfs.io/ipfs/QmRfhWo4c24MWYXLxu69FcJBnKpmnjY9mN5nMiK8U9zNxB

文件哈希值:QmVwdMZj5z1iSeKhmLPdZ6Diipn3krGZUnMLQMVxj4NjW7
ipfs官方网关:https://ipfs.io/ipfs/QmVwdMZj5z1iSeKhmLPdZ6Diipn3krGZUnMLQMVxj4NjW7

20171213102920138.png


0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则