Как проверить изображения base64 в NodeJS / Express? - PullRequest
0 голосов
/ 13 декабря 2018

Допустим, я создаю REST API с Node / Express, и обмен данными между клиентом и сервером осуществляется через JSON.

Пользователь заполняет регистрационную форму, и одно из полей представляет собой изображение для загрузки изображения профиля.Изображения не могут быть отправлены через JSON и поэтому должны быть преобразованы в строку base64.

Как мне проверить, действительно ли это строка base64 изображения на стороне сервера?Или лучше не отправлять изображение профиля как base64?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Значение Base64 является действительным изображением, только если его декодированные данные имеют правильный тип MIME, а ширина и высота больше нуля.Удобный способ проверить все это - установить пакет jimp и использовать его следующим образом:

var b64 = 'R0lGODdhAQADAPABAP////8AACwAAAAAAQADAAACAgxQADs=',
buf = Buffer.from(b64, 'base64');

require('jimp').read(buf).then(function (img) {
    if (img.bitmap.width > 0 && img.bitmap.height > 0) {
        console.log('Valid image');
    } else {
        console.log('Invalid image');
    }
}).catch (function (err) {
    console.log(err);
});
0 голосов
/ 13 декабря 2018

Вы можете начать с проверки, является ли строка образом base64 с правильным типом mime.
Я нашел эту библиотеку в реестре npm, выполняющую именно это (не проверено).

const isBase64 = require('is-base64');
let base64str_img = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAoHBwgHBgoIC...ljA5GC68sN8AoXT/AF7fw7//2Q==';

console.log(isBase64(base64str_img, { mime: true })); // true

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

В любом случае, если вы хотите быть действительно увереннымЧто касается пользовательского ввода, вы должны обрабатывать его в первую очередь самостоятельно.Это лучшая практика, о которой вы должны заботиться.

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