在我正在构建的软件中,我正在使用网络摄像头拍照并从那里将其上传到
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 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()”来尝试调用函数将图像上传到服务器.当我按下按钮时,该文件似乎根本不访问服务器.我有什么东西在这里让它全部工作吗?
解决方法
您不是将其作为文件发送,而是将其作为一个使用
Blob或
File对象发送
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] 举报,一经查实,本站将立刻删除。