Node.js verwendet IPFS, um das Hoch- und Herunterladen von Dateien zu implementieren


Vorwort

Tipp: In diesem Artikel wird Node.js in Kombination mit IPFS zum Hoch- und Herunterladen von Dateien verwendet. IPFS kann einfach als verteiltes Speichersystem verstanden werden. Die Geschwindigkeit beim Hoch- oder Herunterladen von Dateien ist sehr hoch. Die Download-Geschwindigkeit beträgt bis zu 35 M/s , was man sagen kann, es war sehr schnell. Wenn Sie mit der Installation von IPFS nicht vertraut sind, können Sie meinen anderen Artikel „Installation von IPFS“ lesen .

1. Projektvorbereitung

Installieren Sie zunächst Node.js und IPFS. Informationen zur Installation von Node.js finden Sie in einem anderen Artikel über die Installation und Verwendung von Node.js. Nach Abschluss der Installation müssen wir auch die für ipfs erforderlichen Modulabhängigkeiten im Node-Projekt installieren. Jeder, der Node gelernt hat, sollte npm kennen. Verwenden Sie einfach npm, um es zu installieren. Die erforderlichen Modulabhängigkeiten sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

2. Projektrealisierung

1. Die für die Installation von IPFS erforderlichen Abhängigkeiten

Das Verzeichnis des Projekts ist wie folgt:
Fügen Sie hier eine Bildbeschreibung ein
Die Datei package.json enthält die Abhängigkeiten, die wir benötigen.
Mit npm installieren

npm install 

Warten Sie nach der Ausführung des obigen Codes, bis alle Module installiert sind.

2. Kapseln Sie die ipfs-Schnittstelle

Kapseln Sie die Upload- und Download-Funktionen von ipfs. Der Code lautet wie folgt:

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. Öffnen Sie ipfs

Geben Sie den Befehl zum Aktivieren von ipfs in die Systembefehlszeile ein:

ipfs daemon

Öffnen Sie erfolgreich, wie unten gezeigt:
Fügen Sie hier eine Bildbeschreibung ein

4. Verwenden Sie den Knoten, um ipfs aufzurufen

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

Einige Ausführungsergebnisse sind wie folgt:
Fügen Sie hier eine Bildbeschreibung ein

Guess you like

Origin blog.csdn.net/xiaoning9299/article/details/121341804