Загрузить изображение в base64 post-запросом на сайт с помощью nodejs и php

80
10 ноября 2021, 09:40

Как загрузить на сайт изображение в base64, отправив post-запрос с nodejs с именем изображения и самим base64?

Пользователь хочет загрузить картинку на сайт. Он её загружает, вводит имя для изображения и нажимает "загрузить", отправляя запрос на сервер уже с изображением base64. Сервер проверяет самого пользователя и отправляет post-запрос на, к примеру, upload.php. (дальше не знаю как реализовать) В upload.php проверяется само изображение на то, что это изображение, загружает его в папку 'img' и сервер получает успех.

Запрос отправить я могу, а вот в php я тыква. Прошу вас помочь, буду очень благодарен!

Answer 1

Так как было понятно, что мне никто не поможет, пришлось помочь самому себе и клеить решение. В итоге, спустя огромные паутины гугла, я вылепил такое решение моего вопроса. Кому помог, буду рад, если Вы отметите мой ответ полезным :)

nodejs:

const request = require('request');
async function doRequest(icon, way) {
    return new Promise(function (resolve, reject) {
        request.post({uri: "http://site.com/upload.php", form: {img: icon, way: way}}, (error, res, body) => {
            if (!error && res.statusCode == 200) {
                resolve(body);
            } else {
                reject(error);
            }
        });
    });
}
const load_img = await doRequest(base64, 'img/name');
let icon = null;
if (load_img.split(' ')[0] == 'success') {
    icon = load_img.split(' ')[1];
    console.log(`загружено! путь - "${icon}"`);
} else {
    console.log(load_img);
}

php:

<?php
$icon = $_POST['img'];
$way = $_POST['way'];
if (preg_match('/^data:image\/(\w+);base64,/', $icon, $type)) {
    $icon = substr($icon, strpos($icon, ',') + 1);
    $type = strtolower($type[1]);
    if (!in_array($type, [ 'jpg', 'jpeg', 'gif', 'png' ])) {
        die('invalid image type');
    }
    $icon = base64_decode($icon);
    if ($icon === false) {
        die('base64_decode failed');
    }
} else {
    die('did not match data URI with image data');
}
$way = "{$way}.{$type}";
file_put_contents($way, $icon);
echo "success {$way}";
?>

Спасибо Stack Overflow, что ты существуешь!

READ ALSO
Как реализовать очередь с приоритетом на PHP+Nginx?

Как реализовать очередь с приоритетом на PHP+Nginx?

Есть сервер, где выполняется обработка изображений и видеоОбращения к скрипту на сервере для обработки идут двух типов: от не авторизованных...

106
Классовый тип для работы со структурами типа &quot;Вектор&quot;

Классовый тип для работы со структурами типа "Вектор"

![На фото я уже использую готов Vector а мне нужно сделать собственный]11

202
Как обработать NullPointerException java?

Как обработать NullPointerException java?

Всем привет! Есть такой кусок кода

181
Как выбрать элемент из списка с помощью selenium?

Как выбрать элемент из списка с помощью selenium?

Подскажите пожалуйста, как выбрать элемент который находится внутри списка "select"? Пробовал использовать класс Select, но все равно вылетает...

215