Сохранение диаграмм RGraph на локальном компьютере

У меня проблемы с сохранением изображений в локальный файл. Все остальные вещи выглядят нормально, но изображение просто не сохраняется. Вот фрагмент моего кода.

    function saveImage(){
    var xmlhttp;
    xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
    xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            //do something with the response
        }
    }
    xmlhttp.open("POST","ajxstuff.php",true);
    var oldCanvas = document.getElementById('cvs').toDataURL("image/png");
    var img = new Image();
    img.src = oldCanvas;
    xmlhttp.setRequestHeader("Content-type", "application/upload")
    xmlhttp.send(oldCanvas);
}

Вот файл ajxstuff.php

<?php

if (isset($GLOBALS["HTTP_RAW_POST_DATA"]))
{
    // Get the data like you would with traditional post
    $rawImage=$GLOBALS['HTTP_RAW_POST_DATA'];

    // Remove the headers  
    $removeHeaders=substr($rawImage, strpos($rawImage, ",")+1);

    // decode it from base 64 and into image data only
    $decode=base64_decode($removeHeaders);

    // save to your server
    $saveName = 'C:\Users\Administrator\Downloads\image009.png';
    $fopen = fopen($saveName, 'wb' );
    fwrite( $fopen, $decode);
    fclose( $fopen );
}

?>

person Isiaq Abdul-Azeez Olugbenga    schedule 10.07.2015    source источник
comment
Что на самом деле происходит, когда вы запускаете свой код? Есть ошибки? О чем говорят ошибки?   -  person Kenster    schedule 10.07.2015
comment
Я на самом деле использую это для создания отчета. Это не дает никакой ошибки. Отчеты показаны без графика. Он не сохраняется в указанном каталоге.   -  person Isiaq Abdul-Azeez Olugbenga    schedule 10.07.2015
comment
Если вы используете jQuery, чтобы помочь с вашим AJAX, это будет означать, что вам придется писать меньше постороннего кода. Например, $.post('ajxstuff.php', function () { /*функция обратного вызова*/ })   -  person Richard    schedule 11.07.2015


Ответы (1)


Хорошо, вот мой пересмотренный ответ: вы могли бы вместо того, чтобы отправлять изображение в виде (как оно выглядит) файла, отправить его в виде текста, поскольку это то, что вы получаете от toDataUrl() (представление изображения в кодировке base64).

$.post('ajxstuff.php',{
    myChart: document.getElementById('cvs').toDataURL()
}, function ()
{
    /* callback */
})

И в вашем PHP-скрипте данные будут отображаться в $_POST['myChart'] - и вы можете записать их в такой файл:

<?php
    $data = base64_decode($_POST['myChart']);
    file_put_contents('C:\Users\Administrator\Downloads\image009.png', $data);
?>
person Richard    schedule 11.07.2015