使用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"));