使用multer从客户端获取详细信息后如何在nodejs中以base64编码文件
How to encoded files in base64 in nodejs after getting details from client-side using multer
我正在将 angular 的文件详细信息发送到我的 app.js 作为
onFileSelected(event: EventEmitter<File[]>) {
const file: File = event[0];
console.log(file);
const formData = new FormData();
formData.append('file', file);
const r = new XMLHttpRequest();
r.open('POST', '/user/upload');
r.send(formData);
}
然后在 app.js
const multer = require('multer');
const upload = multer({dest:'./pics/'});
router.post('/upload', upload.single('image'), (req,res) => {
const body = req.file;
console.log(body);
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
}
我的console.log(body)
给出
{ fieldname: 'image',
originalname: '21329726_1866651723650020_188839340_o.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './pics/',
filename: '5146c9818ff517c426e34ad84ff3513f',
path: 'pics/5146c9818ff517c426e34ad84ff3513f',
size: 94093
}
现在问题来了-
1 - 我不想在任何文件夹中上传我的 image/pdf
文件,但它在 './pics/'
中上传。
2- 我想在 cloudinary
中上传该文件,这就是我要生成该文件的 base64
的原因,但是当我生成 base64
并将其上传到云中时,它给出了一个错误。
我认为这不是正确的编码方法 base64
或者我正在编码错误的数据格式。
请帮帮我
我建议您使用 multiparty。一个简单易行的解决方案处理表单数据。
您可以在此处上传文件而不保存。我用它来保存 AWS S3
中的文件
router.post('/upload',(req,res)=>{
let form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
//here files is array
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
});
});
否则您只需省略 dest
对象。该文件将存储在内存中而不是物理位置:
通过提供选项对象(在本例中为 {dest:'./pics/'}
),您告诉 multer
您希望将文件存储在该目录中。相反,将其配置为将文件保存在内存中:
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })
根据文档,file
对象还应包含一个 buffer
属性,其中包含文件数据。你应该能够做到:
console.log(body.buffer.toString("base64"));
我正在将 angular 的文件详细信息发送到我的 app.js 作为
onFileSelected(event: EventEmitter<File[]>) {
const file: File = event[0];
console.log(file);
const formData = new FormData();
formData.append('file', file);
const r = new XMLHttpRequest();
r.open('POST', '/user/upload');
r.send(formData);
}
然后在 app.js
const multer = require('multer');
const upload = multer({dest:'./pics/'});
router.post('/upload', upload.single('image'), (req,res) => {
const body = req.file;
console.log(body);
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
}
我的console.log(body)
给出
{ fieldname: 'image',
originalname: '21329726_1866651723650020_188839340_o.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './pics/',
filename: '5146c9818ff517c426e34ad84ff3513f',
path: 'pics/5146c9818ff517c426e34ad84ff3513f',
size: 94093
}
现在问题来了-
1 - 我不想在任何文件夹中上传我的 image/pdf
文件,但它在 './pics/'
中上传。
2- 我想在 cloudinary
中上传该文件,这就是我要生成该文件的 base64
的原因,但是当我生成 base64
并将其上传到云中时,它给出了一个错误。
我认为这不是正确的编码方法 base64
或者我正在编码错误的数据格式。
请帮帮我
我建议您使用 multiparty。一个简单易行的解决方案处理表单数据。
您可以在此处上传文件而不保存。我用它来保存 AWS S3
router.post('/upload',(req,res)=>{
let form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
//here files is array
const base64Data = new Buffer(JSON.stringify(body)).toString("base64");
console.log(base64Data);
});
});
否则您只需省略 dest
对象。该文件将存储在内存中而不是物理位置:
通过提供选项对象(在本例中为 {dest:'./pics/'}
),您告诉 multer
您希望将文件存储在该目录中。相反,将其配置为将文件保存在内存中:
var storage = multer.memoryStorage()
var upload = multer({ storage: storage })
根据文档,file
对象还应包含一个 buffer
属性,其中包含文件数据。你应该能够做到:
console.log(body.buffer.toString("base64"));