微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用AJAX将图像从画布上传到PHP服务器

在我正在构建的软件中,我正在使用网络摄像头拍照并从那里将其上传PHP服务器以供以后使用.我已经使用表单成功地将图像从我的计算机上传到服务器,但由于我想要上传的图像已经预先确定,所以我一直在研究使用AJAX.我从网络摄像头拍摄快照的代码如下:

var video = document.getElementById('video');

        // Get access to the camera!
        if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
            // Not adding `{ audio: true }` since we only want video Now
            navigator.mediaDevices.getUserMedia({video: true}).then(function (stream) {
                video.src = window.URL.createObjectURL(stream);
                video.play();
            });
        }

        // Elements for taking the snapshot
        var canvas = document.getElementById('canvas');
        var context = canvas.getContext('2d');
        var video = document.getElementById('video');

        // Trigger photo take
        document.getElementById("snap").addEventListener("click",function () {
            var img = context.drawImage(video,640,480);
        });

        document.getElementById("capture").addEventListener("click",function () {
            context.drawImage(video,480);
            //var capture = canvas.toDataURL();
        });

这是我保存此图像的PHP代码

<?PHP
    if (isset($_POST['upload'])) {
        $image_name = $_FILES['image']['name'];
        $image_name = $_FILES['image']['type'];
        $image_name = $_FILES['image']['size'];
        $image_tmp_name = $_FILES['image']['tmp_name'];

        if ($image_name == '') {
            echo "<script>alert('Please select an image.')</script>";
            exit();
        } else {
            move_uploaded_file($image_tmp_name,"pictures/$image_name");
            echo "Image uploaded succesfully.";
            echo "<img src= 'pictures/$image_name'>";
        }
    }
    ?>

我确信这些代码都可以工作,因为我已经单独测试了它们.如前所述,我试图使用AJAX将它们绑定在一起.我找到的示例代码是:

function saveImage() {
            var capture = canvas.toDataURL("image/png");
            var xmlHttpReq = false;
            if (window.XMLHttpRequest) {
                ajax = new XMLHttpRequest();
            }

            else if (window.ActiveXObject) {
                ajax = new ActiveXObject("Microsoft.XMLHTTP");
            }
            ajax.open('POST','picture.PHP',false);
            ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
            ajax.onreadystatechange = function () {
                console.log(ajax.responseText);
            }
            ajax.send("imgData=" + capture);
        }

我在按钮内使用onClick =“saveImage()”来尝试调用函数将图像上传到服务器.当我按下按钮时,该文件似乎根本不访问服务器.我有什么东西在这里让它全部工作吗?

解决方法

您不是将其作为文件发送,而是将其作为一个使用 BlobFile对象发送

var blob = new Blob([capture ],{type: 'application/octet-binary'});
var form = new FormData();
var fileName = 'snap.png';    //filename
form.append('something',blob,fileName);

在服务器上解码并保存

$dest = 'uploads/'.$_FILES['something']['name'];

move_uploaded_file($_FILES['something']['tmp_name'],$dest);
$file = file_get_contents($dest);
$tmp = explode(',',$file);                       //remove data: header
file_put_contents($dest,base64_decode($tmp[1])); //decode base64 n save

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐