NodeJS записывает файл изображения base64

Мой NodeJS-сервер получает кодировку base64.

data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z 

Полученные данные должны быть сохранены как jpg. Поэтому я использую Buffer и FileSystemWriter:

 var imageBuffer = new Buffer(data, 'base64'); //console = <Buffer 75 ab 5a 8a ... fs.writeFile("test.jpg", imageBuffer, function(err) { //... }); 

fs.writeFile не вызывает ошибку. Файл jpeg сохраняется, но я не могу его открыть. Image-Viewer говорит:

 File is damaged or too big. 

Исходный файл имеет размер 6kb и новый файл 7kb.

Вы должны удалить из него метаинформацию url, data:image/jpeg part. (Повторяя, что сказал @CBroe) Вот небольшая функция для возврата правильной информации из входной строки.

 var data = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg=='; function decodeBase64Image(dataString) { var matches = dataString.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], 'base64'); return response; } var imageBuffer = decodeBase64Image(data); console.log(imageBuffer); // { type: 'image/jpeg', // data:  } 

Затем вы можете сохранить буфер, используя указанный выше метод.

 fs.writeFile('test.jpg', imageBuffer.data, function(err) { ... }); 

Другой способ – использовать fs.writeFile с опцией base64 кодирования после удаления метаинформации.

 var image = 'data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg=='; var data = image.replace(/^data:image\/\w+;base64,/, ''); fs.writeFile(fileName, data, {encoding: 'base64'}, function(err){ //Finished }); 

попробуйте этот простой способ

  var imgData = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA..kJggg=='; var base64Data = imgData.replace(/^data:image\/png;base64,/, ""); require("fs").writeFile("out.png", base64Data, 'base64', function(err, data) { if (err) { console.log('err', err); } console.log('success'); }); 

focuse здесь 1) data:image/png;base есть png 2) replace(/^data:image\/png; здесь тоже png и имя должно сохраняться с 3) writeFile("out.png png

  • Использование MemoryStore в производстве
  • Как удалить nodejs, установленный из pkg (Mac OS X)?
  • команда bower не найдена
  • npm ошибки установки с ошибкой: ENOENT, chmod
  • Примеры использования RedisStore в socket.io
  • Что такое синтаксис версии bower (и npm)?
  • npm WARN package.json: Поле репозитория отсутствует
  • MongoDB, удалять объект из массива
  • Остановить Mongoose от создания свойства _id для элементов массива поддокумента
  • В чем разница между __dirname и ./ в node.js?
  • Как получить полный URL в Express?
  • Давайте будем гением компьютера.