在express nodejs中将图像文件转换为base64

时间:2018-02-13 08:10:40

标签: javascript html node.js express binary

我正在尝试将图片文件转换为bas64,因此我可以在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:path必须是字符串或缓冲区

如何将该图像文件(例如:image.jpg)转换为base64?

2 个答案:

答案 0 :(得分:2)

您需要使用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.toString('base64')
  console.log(encoded)
})

2018-10-24:见下面David的评论。

答案 1 :(得分:1)

由于先前的答案对我不起作用,因此我分享了另一个有效的答案。 我使用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');
});