Предположим, вы имеете в виду файл PDF.И есть простой актив под названием Invoice
Asset Invoice identified by id {
o String id
o String pdfLocation
o String pdfHash
}
Теперь вы можете технически определить массив и сохранить pdf в виде строки, но, как уже упоминалось, это не очень хорошая практика.Вместо этого в одном из моих PoC я реализовал решение следующим образом.
- Первый шаг - пользователь создает новый актив
Invoice
и вместе с ним хочет прикрепить PDF-копию фактического счета - Он отправляет вызов API с подробной информацией и использует
multer
для анализа PDF.Это возвращает информацию в req.file
, которая затем обрабатывается с использованием express
и сохраняется в mongoDB
- . Как только файл был сохранен в
mongoDB
, к нему можно получить доступ только посредством прямого вызова API длясервер.Независимо от того, какой ACL вы хотите применить, вы делаете это здесь, в промежуточном программном обеспечении - После сохранения документа
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 };