IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> Node.js使用IPFS实现文件上传和下载 -> 正文阅读

[区块链]Node.js使用IPFS实现文件上传和下载


前言

提示:本文使用Node.js结合IPFS实现文件的上传和下载,IPFS可以简单的理解为一个分布式存储系统,在这上面上传或下载文件的速度十分快,亲测下载速度达35M/s,可以说是非常快的了。如果对IPFS的安装不熟悉的可以去看我的另一篇文章《IPFS的安装》

一、项目准备

首先安装好Node.js和IPFS,安装Node.js可以参考另一篇文章Node.js的安装与使用。安装好之后,我们还需要在node项目中安装ipfs所需要的模块依赖,学过node的应该都知道npm,直接使用npm进行安装即可,所需安装的模块依赖如下:
在这里插入图片描述

二、项目实现

1.安装IPFS所需依赖

项目的目录如下所示:
在这里插入图片描述
其中package.json文件中就是我们所需要的依赖。
使用npm安装

npm install 

执行上述代码后等待所有的模块安装完成即可。

2.封装ipfs接口

封装ipfs的上传和下载功能,代码如下:

const ipfsAPI = require('ipfs-api');
const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'});
const fs  = require('fs');
//传入要上传的文件路径
exports.add = (addPath) =>{
    return new Promise((resolve,reject)=>{
        try {
            let buffer = fs.readFileSync(addPath);
            ipfs.add(buffer, function (err, files) {
                if (err || typeof files == "undefined") {
                    reject(err);
                } else {
                    resolve(files[0].hash);
                }
            })
        }catch(ex) {
            reject(ex);
        }
    })
}
//传入文件的hash地址以及要下载到哪个目录的路径
exports.get = (hash,getPath) =>{
    return new Promise((resolve,reject)=>{
        try{
            ipfs.get(hash,function (err,files) {
                if (err || typeof files == "undefined") {
                    reject(err);
                }else{
                    fs.writeFileSync(getPath,files[0].content);
                    resolve('ok');                   
                }
            })
        }catch (ex){
            reject(ex);
        }
    });
}

3.开启ipfs

在系统命令行中输入开启ipfs的命令:

ipfs daemon

开启成功如下图:
在这里插入图片描述

4.使用node调用ipfs

const ipfsAPI = require('ipfs-api');
const ipfs = ipfsAPI({host: 'localhost', port: '5001', protocol: 'http'});
const fs = require('fs');
let User = {
        "name":"yyn",
        "age":23,
        "level":"test"
};
 buff = Buffer.from(JSON.stringify(User));
 var hashStr = '';
 //上传模型参数
 ipfs.add(buff,async (err,result)=>{
     if(err) throw err;
     console.log(result);  //打印上传的信息
     hashStr = result[0].hash;  //保存hash值
     console.log(hashStr); //输出上传后所获得的hash值
 });

 //下载模型参数
 var resuleStr;
 let hashStr = 'QmeDaPoWWQmswu8yrGoY6DrnU158iACSLJwy5RegTUXRdv';
 ipfs.cat(hashStr,async (err,buffer)=>{
    if(err) throw err;
    resuleStr = buffer.toString();
    console.log('打印下载的模型参数: '+resuleStr);
    let User = JSON.parse(resuleStr); //转化json 获取单个参数
    console.log(User);
    console.log('获取模型参数中的某个数据(name): '+User.name);
 })

//尝试上传文件路径
var addPath = "./file/add/test3.mp4";
var buff = fs.readFileSync(addPath);
//console.log(buff);
ipfs.add(buff,async (err,result)=>{
    if(err) throw err;

    console.log(result);
    var hash = result[0].hash;
    console.log(hash);
})

//下载文件
var hashStr = 'QmZY39pRrAqwEZPr9wcoomuBbSaZmi3wsbhTDwd9aXSazL';
var getPath = "./file/get/test3.mp4";
ipfs.get(hashStr,async (err,result)=>{
    if(err) throw err;
    console.log(result);  //注意:调用get方法时回调函数中的参数是一个数组形式 内容在content中
    fs.writeFileSync(getPath,result[0].content);
    console.log('file: ' + getPath);
    console.log('从ipfs中下载文件成功!')
    //写入文件
})
var hashStr = 'QmZY39pRrAqwEZPr9wcoomuBbSaZmi3wsbhTDwd9aXSazL';
ipfs.get(hashStr,archive=true,'./file/get/test3qq.mp4',async(err,result)=>{
        if(err) throw err;
        console.log(result);  //注意:调用get方法时回调函数中的参数是一个数组形式 内容在content中
        //fs.writeFileSync(getPath,result[0].content);
        //console.log('file: ' + getPath);
        console.log('从ipfs中下载文件成功!')
        //写入文件)
})

ipfs.add(buff,async (err,result)=>{
         if(err) throw err;
         console.log(result);  //打印上传的信息
         hashStr = result[0].hash;  //保存hash值
         console.log(hashStr); //输出上传后所获得的hash值
});

部分执行结果如下:
在这里插入图片描述

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-17 12:48:27  更:2021-11-17 12:48:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:29:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码