функциональный узел для загрузки файла в ipfs и для возврата хэша файла - PullRequest
0 голосов
/ 16 июня 2019

Я не очень разбираюсь в JavaScript, но мне действительно нравится среда Node-Red для подключения к устройствам IoT.Я построил небольшой поток, который соединяет узел http-запроса (чтобы получить изображение) с узлом функции, а узел функции - с узлом msg-debug (чтобы увидеть, что происходит).

Рисунок успешно захвачен узлом запроса, и я использовал эту функцию javascript в узле функции, чтобы отправить полезную нагрузку (изображение) в IPFS, чтобы загрузить его и получить обратно хэш загруженного файла, но этоне работаетЧто я делаю не так?

Обратите внимание, что на моей машине запущен демон IPFS: http://localhost:5001/

Я пробовал разные сценарии (из node.js или других онлайн-примеров).) но никто не работал.

Вот код в узле функции:

//const ipfsAPI = require('ipfs-api');

var payload=msg.payload;

function toIPFS(file) {
    return new Promise(resolve => {
        const reader = new FileReader();
        reader.onloadend = function() {
        const ipfs = IpfsApi('ipfs', 5001,{protocol : "http"}) // Connect to IPFS
        const buf = buffer.Buffer(reader.result) // Convert data into buffer
        ipfs.files.add(buf, (err, result) => { // Upload buffer to IPFS
            if(err) {
              return "error";
            }
              let url = `https://ipfs.io/ipfs/${result[0].hash}`
              resolve('resolved url');
          })
        }
        reader.readAsArrayBuffer(file); // Read Provided File
        //console.log(`done!!!!`)
   });
  }
//var test = toIPFS(payload);
toIPFS(payload);

return msg;

Объект сообщения, который я получаю от узла msg-debug в конце, выглядит так:

object
_msgid: "80561394.e873e"
topic: ""
payload: ""
statusCode: 200
headers: object
accept-ranges: "bytes"
access-control-allow-origin: "*"
access-control-expose-headers: "Content-Length"
cache-control: "max-age=604800, must-revalidate"
content-type: "image/jpeg"
date: "Sun, 16 Jun 2019 16:39:46 GMT"
last-modified: "Thu, 28 Jun 2018 04:32:21 GMT"
server: "ECS (lcy/1D6A)"
strict-transport-security: "max-age=631138519"
surrogate-key: "media media/bucket/2 media/1012192454752301056"
x-cache: "HIT"
x-connection-hash: "4d2ce5d9ed372dccc93b26cf6e8ce8c4"
x-content-type-options: "nosniff"
x-response-time: "460"
content-length: "127686"
connection: "close"
x-node-red-request-node: "6f2e7990"
responseUrl: "https://upload.wikimedia.org/wikipedia/commons/1/12/K2_2006b.jpg"
redirectList: array[0]

1 Ответ

0 голосов
/ 17 июня 2019

Не требуется никакой обработки файлов, поскольку у вас уже есть содержимое файла в буфере (в msg.payload).

Так что вы должны просто позвонить:

const ipfs = IpfsApi('ipfs', 5001,{protocol : "http"})
ipfs.files.add(buf, (err, result) => {
    msg.payload = result[0].hash;
    node.send(msg)
})

(при условии, что вы добавили модуль ipfs в глобальный контекст , поэтому он находится в области видимости.)

...