我试图找到一种方法将文件保存在以base64编码字符串形式发送的环回应用程序中。
所以我有一个包含所有可能字段的模型以及base64编码图像,“收据”。
{
...modelData,
"receipt": "datadata:image/jpeg;base64,whatever=="
}
所以......我想到的是这个
Model.beforeRemote('create', function(ctx, model, next) {
const file = ctx.args.data.receipt;
app.models.Attachment.upload(...)
// and replace base64 with returned filename
})
但我不清楚我应该如何以及如何传递给上传方法。或许它必须是一些不同的方法。
谢谢!
答案 0 :(得分:0)
这不是一个远程钩子,而是一个远程方法,但我相信你可以根据自己的需要调整代码。
我们基本上创建了一个名为" upload"的远程方法。对于Documents
模型,它负责将其上传到预定义的容器名称。
const CONTAINERS_URL = '/api/container/';
const fs = require('fs');
const path = require('path');
const encodedFileContainer = 'files';
module.exports = function(Document) {
Document.upload = function(encodedFile, fileName, cb) {
let uploadStream = Document.app.models.container.uploadStream(
encodedFileContainer,
fileName
);
uploadStream.end(encodedFile, 'base64', async err => {
if (err) return cb(err);
let newRecord = await Document.create(
{
fileName,
url: CONTAINERS_URL + encodedFileContainer + '/download/' + fileName,
container: encodedFileContainer
},
function(err, obj) {
if (err !== null) {
cb(err);
} else {
cb(null, obj);
}
}
);
});
};
Document.remoteMethod('upload', {
description: 'Uploads a file',
accepts: [
{
arg: 'endcodedFile',
type: 'string',
required: true,
description: 'base64 encoded file',
http: {source: 'form'}
},
{
arg: 'fileName',
type: 'string',
required: true,
description: 'file name',
http: {source: 'form'}
}
],
returns: {
arg: 'fileObject',
type: 'object',
root: true
},
http: {verb: 'post'}
});