0

Пытаюсь передать сгенерированный QR код в PNG на сервер под заданным идентификатором, используя FormData, но судя по var_dump в обработчик попадает [object Promise].

Вот код, который генерит изображение через библиотеку QR Code Styling и передает через ajax в обработчик:

    const qrCode = new QRCodeStyling({
        width: 490,
        height: 490,
        type: "canvas",
        data: "https://www.vk.com/",
        image: "./img/gvoice_i.png",
        dotsOptions: {
            color: "#fff",
            type: "rounded"
        },
    cornersSquareOptions: {
        type: "extra-rounded"
    },

    backgroundOptions: {
        color: "transparent"},

    imageOptions: {
        imageSize: 0.5,
        saveAsBlob: true,
        crossOrigin: "anonymous",
        margin: 5
    }
});

var pngBlob = qrCode.getRawData('png');

var myformData = new FormData();
myformData.append('QRcode', pngBlob); myformData.append('FileName', 'Filename');

$.ajax('ajax.php',{
    method: 'post',
    processData: false,
    contentType: false,
    cache: false,
    data: myformData,
    enctype: 'multipart/form-data'
});

Обработчик PHP:

<?php
$name = $_POST['FileName'].".png";
$png = $_POST['QRcode'];
$myfile = fopen($name, "w");
fwrite($myfile, $png);
?>

Var_dump:

array(2) {
  ["QRcode"]=>
  string(16) "[object Promise]"
  ["FileName"]=>
  string(8) "Filename"
}
  • 1
    Судя по ответу, картинка не успевает сгенерироваться и возвращает промис на свое место. Поэтому и отправляется на сервер [object Promise]. Попробуйте, добавить через конструкцию Promise.then() – SaNFeeD Sep 26 '22 at 08:15

1 Answers1

0

Попробуйте так.

qrCode.getRawData('png').then(qrImg => {
  var myformData = new FormData();        
  myformData.append('QRcode', qrImg );
  myformData.append('FileName', 'Filename');

$.ajax('ajax.php',{ method: 'post', processData: false, contentType: false, cache: false, data: myformData, enctype: 'multipart/form-data' }); });

SaNFeeD
  • 645
  • попробовал, создается пустой файл(( по var_dump только filename передает: array(1) { ["FileName"] => string(8) "Filename" } – dragon99 Sep 26 '22 at 08:29