Технически base64 - это текстовое представление двоичных данных - если вы согласны с этим, ответы верны. Если вы хотите отправить реальные двоичные данные, вы должны использовать FormData .
Если я правильно читаю ваш вопрос, вы сохраняете html-скриншот в элемент canvas. Если это так, вместо чтения 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 Inspector, то увидите, что создан правильный составной запрос:
------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);
?>