首页 > 解决方案 > 使用multer从客户端获取详细信息后,如何在nodejs中以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或者我正在编码错误的数据格式。

请帮我。

标签: javascriptnode.jsangularmulter

解决方案


通过提供选项对​​象(在这种情况下{dest:'./pics/'}),您告诉multer您要将文件存储在该目录中。相反,将其配置为将文件保存在内存中:

var storage = multer.memoryStorage()
var upload = multer({ storage: storage })

根据文档,该file对象还应包含一个buffer包含文件数据的属性。你应该能够做到:

console.log(body.buffer.toString("base64"));

推荐阅读