hyperledger作曲家是否支持文档(.doc,PDF或图像)附件?基本上,我想在模型文件中将文档添加为资产的属性。我是一个初学者,任何建议将不胜感激!
答案 0 :(得分:0)
建议不要将大文件放入区块链。因此,您可以做的是将其存储在某个位置,并将链接存储到一个路径变量。为确保文件未更改,您可以在将文件内容存储在某个位置时对其进行哈希处理,并在检索时检查该哈希。如果需要将文件强制存储在区块链中,则可以将文件编码为base64(推荐)字符串,然后对其进行解码以再次获取文件。
答案 1 :(得分:0)
您可以将文件数据存储到IPFS
中。 IPFS是一种协议和网络,旨在创建一种在distributed file
系统中存储和共享超媒体的可寻址内容的对等方法。
对于IPFS,我建议您遵循link。
在成功上传文件后,IPFS将为您提供一个Hash
链接。您可以将哈希存储到资产中,或参与超级账本编辑器的创建。
我希望它会对您有所帮助:)
答案 2 :(得分:0)
让我们假设您的意思是PDF文件。还有一个名为“发票”的简单资产
Asset Invoice identified by id {
o String id
o String pdfLocation
o String pdfHash
}
现在,您可以从技术上定义一个数组并将pdf存储为字符串,但是如上所述,这不是一个好习惯。相反,在我的一个PoC中,我实现了以下解决方案。
Invoice
资产,并希望附加一个实际发票的pdf副本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 };