Поддержка вложений документов Hyperledger Composer - PullRequest
0 голосов
/ 21 февраля 2019

Поддерживает ли hyperledger composer документ (.doc, PDF или изображение) вложение?По сути, я хочу добавить документ в качестве свойства актива в файл модели.Я новичок, любой совет будет оценен!

Ответы [ 3 ]

0 голосов
/ 22 февраля 2019

Вы можете сохранить данные вашего файла в IPFS.IPFS - это протокол и сеть, предназначенные для создания адресуемого по контенту однорангового метода хранения и совместного использования гипермедиа в системе distributed file.

Для IPFS я рекомендую перейти по ссылке .

IPFS даст вам ссылку Hash после успешной загрузки файла.Вы можете сохранить , что хэш , в актив или участвовать в работе композитора hyperledger.

Надеюсь, это поможет вам:)

0 голосов
/ 22 февраля 2019

Предположим, вы имеете в виду файл PDF.И есть простой актив под названием Invoice

Asset Invoice identified by id {
  o String id
  o String pdfLocation
  o String pdfHash
}

Теперь вы можете технически определить массив и сохранить pdf в виде строки, но, как уже упоминалось, это не очень хорошая практика.Вместо этого в одном из моих PoC я реализовал решение следующим образом.

  1. Первый шаг - пользователь создает новый актив Invoice и вместе с ним хочет прикрепить PDF-копию фактического счета
  2. Он отправляет вызов API с подробной информацией и использует multer для анализа PDF.Это возвращает информацию в req.file, которая затем обрабатывается с использованием express и сохраняется в mongoDB
  3. . Как только файл был сохранен в mongoDB, к нему можно получить доступ только посредством прямого вызова API длясервер.Независимо от того, какой ACL вы хотите применить, вы делаете это здесь, в промежуточном программном обеспечении
  4. После сохранения документа mongoDB или любой другой БД вернет первичный ключ.Это хранится в pdfLocation.Когда счет требуется получить, пользователь сначала получает актив Invoice, получает доступ к pdfLocation, а затем запрашивает документ у самого mongoDB, ссылаясь на первичный ключ

Быстрые фрагменты для получениявы начали

const express = require('express');
const multer = require('multer');
const router = express.Router();
let storage = multer.memoryStorage();
let upload = multer({ storage: storage })

router.post('/invoice, upload.single('invoice-pdf'), createInvoice);

const createInvoice = async (req, res, next) => {
  // Do your usual stuff of connecting via businessNetworkConnection
  // Assume the file upload is a success

  let document = new documentSchema({
        originalName: req.file.originalname,
        file: req.file.buffer,
        creationDate: new Date()
       );
  let param = await document.save();
  primarykey = param._id;

  let newInvoice = factory.newResource(BASE_NS, 'Invoice', req.body.id);
  // Add whatever values you want
  newInvoice.pdfLocation = primaryKey;
  await registry.add(newInvoice);
}

Схема документа - это простая коллекция для хранения информации.Похоже на это

const documentSchema = new Schema({
  originalName: {
    type: String,
    required: true,
    unique: true
  },
  file: {
    type: Buffer,
    required: true
  },
  creationDate: {
    type: String,
    required: true
  },
});

Предположим, вы можете сделать что-то похожее, если вы используете другую базу данных. Теперь пользователь хочет получить тот же файл PDF из счета.Конечный результат, он вызывает API из внешнего интерфейса и получает PDF-файл, который он может загрузить

router.get('/invoice/pdf', someSecretACL, getPdfFile);

const getPdfFile = async (req, res, next) => {
  // Connect to the business network, load the registry

  let invoice = await registry.get(req.body.id) // Get the invoice
  let primaryKey = invoice.pdfLocation;

  // Now get the bytes from mongoDB and send them to the browser
  let array = await documentSchema.find({ _id: id });
  let pdf = array[0] // assume successful call
  res.contentType("application/pdf");
  res.send(pdf .file);
};

const someSecretACL = async (req, res, next) => { // Do some checks here };
0 голосов
/ 21 февраля 2019

Желательно не помещать огромные файлы в блокчейн.Поэтому то, что вы можете сделать, это сохранить его где-нибудь и сохранить ссылку на одну переменную пути.Чтобы убедиться, что файл не изменен, вы можете хэшировать содержимое файла, сохраняя его где-то, и проверять хеш при получении.Если вам нужно хранить файлы в блокчейне как обязательные, вы можете закодировать файлы в строку base64 (рекомендуется) и декодировать, чтобы получить файл снова.

...