Как сохранить изображение base64, используя node js? - PullRequest
0 голосов
/ 05 февраля 2020

Я сохраняю изображение base64, используя nodejs, оно сохраняет мое изображение по точному пути, но показывает мне ошибку.

Пожалуйста, помогите мне найти ошибку.

enter image description here

Вот мой код

var express = require('express');
var router = express.Router();

const fs = require('fs');
const mime = require('mime');


const path = './uploads';

router.post('/register', (req, res, next) => {
  const base64Image = req.body.image;

  const matches = base64Image.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
  response = {};
  if (matches.length !== 3) {
    return new Error('Invalid input String');
  }

  response.type = matches[1];
  response.data = new Buffer(matches[2]);
  let decodedImg = response;
  let imageBuffer = decodedImg.data;
  let type = decodedImg.type;
  let extension = mime.extension(type);
  let fileName = 'image.' + extension;

  try {
    fs.writeFileSync(path + '/' + fileName, imageBuffer, 'utf8');
    return res.send({ status: 'success' });
  } catch (e) {
    next(e);
  }

  return;

});

module.exports = router;

Любое решение приветствуется!

1 Ответ

2 голосов
/ 05 февраля 2020

Ошибка, которую вы сделали, когда вы создаете буфер, вы не указываете кодировку. Вы должны создать буфер следующим образом:

new Buffer() устарело, вместо этого используйте Buffer.from().

let buff = Buffer.from(m[2],'base64'); // кодировка base64

Basi c фрагмент кода

const fs =  require('fs')
let a =  'base64ImageString'
let m =  a.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);

let b =  Buffer.from(m[2],'base64');
fs.writeFile('image.png',b,function(err){
 if(!err){
 console.log("file is created")
 }
 });

Also, when you writing a buffer to file you don't have to pass encoding type, but if writing string you have to.

Проверьте это для демонстрации

https://repl.it/repls/GrimOfficialLocations

Но это не рекомендуется отправить изображение в виде строки base64. Это неэффективно для больших изображений. Base64 примерно занимает на 33% больше битов, чем его двоичный эквивалент. Я рекомендую вам проверить это: Загрузите изображение base64 с Ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...