簡體   English   中英

在express nodejs中將圖像文件轉換為base64

[英]Converting image-file into base64 in express nodejs

我正在嘗試將圖像文件轉換為 base64,因此我可以將 base64 字符串形式存儲在 mongoDB 中。

這就是我試圖做到這一點的方式:

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?

您將需要使用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.bufferhttps : //github.com/expressjs/multer/blob/master/storage/memory.js#L8

由於之前的答案對我不起作用,我正在分享另一個有效的答案。 我使用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');
});

如果您想要更多控制權,您也可以通過某種方式手動執行此操作。 這是一個示例,但您可以以任何您想要的方式實現它,作為中間件或作為 function 單獨調用。

這是假設您的圖像是 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))

  }
}


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM