画布图像上传给出0KB

时间:2017-12-11 01:56:58

标签: javascript php html canvas

我有一张画布图片需要上传到服务器。

我还保存了MySql的路径。代码的MySql部分完美运行。当我上传画布时,会发生以下两件事之一: 1)它不上传图像。 2)如果上传,则为0KB。

在HTML中我将图像放在隐藏区域中进行上传。 HTML的其余部分基本上是获取图像。

HTML:

<form method="post" accept-charset="utf-8" name="form1">
<input name="hidden_data" id='hidden_data' type="hidden"/>
</form>


<form name="sub" id="sub" method="post" onsubmit="return uploadEx();" action="camtestinsert.php">
<video id="video" width="640" height="480" autoplay></video>
<button id="snap" class="sexyButton" type="button">Snap</button>
<canvas id="canvas" name="canvas" width="640" height="480"></canvas>
<input type="submit" name="Submit" value="Submit" />
</form>

使用Javascript:

<script>

    // Put event listeners into place
    window.addEventListener("DOMContentLoaded", function() {
        // Grab elements, create settings, etc.
        var canvas = document.getElementById('canvas');
        var context = canvas.getContext('2d');
        var video = document.getElementById('video');
        var mediaConfig =  { video: true };
        var errBack = function(e) {
            console.log('An error has occurred!', e)
        };

        // Put video listeners into place
        if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
            navigator.mediaDevices.getUserMedia(mediaConfig).then(function(stream) {
                video.src = window.URL.createObjectURL(stream);
                video.play();
            });
        }

        /* Legacy code below! */
        else if(navigator.getUserMedia) { // Standard
            navigator.getUserMedia(mediaConfig, function(stream) {
                video.src = stream;
                video.play();
            }, errBack);
        } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
            navigator.webkitGetUserMedia(mediaConfig, function(stream){
                video.src = window.webkitURL.createObjectURL(stream);
                video.play();
            }, errBack);
        } else if(navigator.mozGetUserMedia) { // Mozilla-prefixed
            navigator.mozGetUserMedia(mediaConfig, function(stream){
                video.src = window.URL.createObjectURL(stream);
                video.play();
            }, errBack);
        }

        // Trigger photo take
        document.getElementById('snap').addEventListener('click', function() {
            context.drawImage(video, 0, 0, 640, 480);
        });
    }, false);

</script>

<script>
        function uploadEx() {
            var canvas = document.getElementById("canvas");
            var dataURL = canvas.toDataURL("image/png");
            document.getElementById('hidden_data').value = dataURL;
            var fd = new FormData(document.forms["form1"]);

            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'camtestinsert.php', true);

            xhr.upload.onprogress = function(e) {
                if (e.lengthComputable) {
                    var percentComplete = (e.loaded / e.total) * 100;
                    console.log(percentComplete + '% uploaded');
                    //alert('Photo Uploaded Succesfully');
                }
            };

            xhr.onload = function() {

            };
            xhr.send(fd);
        };
    </script>

PHP:

$upload_dir = "Child_Images/";
$img = $_POST['hidden_data'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = $upload_dir . "Photo_ID_UniqueSerial:_" . $photo_ID . ".png";
$success = file_put_contents($file, $data);
print $success ? $file : 'Unable to save the file.';

0 个答案:

没有答案