在Express NodeJS中将图像文件转换为Base64

pgx2nnw8  于 2022-09-21  发布在  Node.js
关注(0)|答案(3)|浏览(169)

我正在尝试将图像文件转换为Base64,这样我就可以在MongoDB中以Base64字符串的形式存储。

这就是我试图做到的:

router.post('/file_upload',function(req,res){

  function base64_encode(file) {
    var bitmap = fs.readFileSync(file);
    return new Buffer(bitmap).toString('base64');
}

  var ImageFileToSave =  base64_encode(req.body.file);

  console.log(ImageFileToSave);

})

客户端:

<form action="/file_upload" method="POST" enctype="multipart/form-
 data">
<input type="file" name="file" />
<input type="submit" value="Upload File" />
</form>

这就是我得到的错误

TypeError:路径必须是字符串或缓冲区

如何将图像文件(例如:Image.jpg)转换为Base64?

xbp102n0

xbp102n01#

您将需要使用Multer中间件来处理multipart/form-data

const express = require('express')
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })

const app = express()

app.post('/file_upload', upload.single('example'), (req, res, next) => {
  // req.file is the `example` file or whatever you have on the `name` attribute: <input type="file" name="example" />
  // I believe it is a `Buffer` object.
  const encoded = req.file.buffer.toString('base64')
  console.log(encoded)
})

2018年10月24日:见大卫的评论如下。

2019-06-11:基于评论的修复示例。它确实是req.file.buffer:https://github.com/expressjs/multer/blob/master/storage/memory.js#L8

ulmd4ohb

ulmd4ohb2#

由于之前的答案对我不起作用,我现在分享另一个有效的答案。我使用Multer库获取文件,然后将其转换为Base64

const multer  = require('multer')
const upload = multer({});

router.post('/uploadlogo', upload.single('logo'), (req, res, next) => {
    // encoded has the base64 of your file
    const encoded = req.file.buffer.toString('base64');
});
guicsvcw

guicsvcw3#

如果您想要更多的控制,也可以通过某种方式手动完成。下面是一个示例,但您可以以任何您想要的方式实现它,作为中间件或单独调用的函数。

这里假设您的映像是Base64,即“req.body.Image”。

var ImageMiddleware =  (req, res, next)=> {
  if (req.body.image && req.body.foldername && req.body.filename){
    const imagepath = req.body.foldername + "/" + uuidv4() + "_" + req.body.filename;

      function buff(data) {
        const base64 = data.split(',')[1];
        let buff = Buffer.from(base64, 'base64');
        return buff
      }

      fs.writeFileSync(imagepath, buff(req.body.image))

  }
}

相关问题