从技术上讲,base64 是二进制数据的文本表示 - 如果您对此感到满意,则上述答案是正确的。如果你想发送真正的二进制数据,你必须使用FormData。
如果我正确阅读了您的问题,您正在将 html“屏幕截图”保存到画布元素。如果是这样,而不是阅读toDataURL,您应该使用toBlob。这将为您提供我们可以使用FormData发送的二进制数据
var form = new FormData();
form.append('image', blob, 'image.jpg');
以上可以使用普通XMLHttpRequest发送:
var request = new XMLHttpRequest();
request.open('POST', 'http://foo.com/submitform.php');
request.send(form);
工作示例 -> codepen
如果您查看 chrome 检查器,您会看到创建了正确的多部分请求:
------WebKitFormBoundaryGWsPW93HnMPQFcXB
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryGWsPW93HnMPQFcXB--
您也可以使用 jQuery 发送上述表单:
$.ajax({
url: 'http://foo.com/submitform.php',
type: 'POST',
data: form,
processData: false,
contentType: false
});
更新
刚刚看到您关于在 PHP 中处理服务器端文件上传的通知。上传的文件在 $_FILES 数组中可用:
<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['image']['name']);
if (move_uploaded_file($_FILES['image']['tmp_name'], $uploadfile)) {
echo "File was successfully uploaded.\n";
} else {
echo "Error";
}
echo 'File info:';
print_r($_FILES);
?>