Técnicamente base 64 es una representación de texto de datos binarios - si estás bien con esto anteriores respuestas son correctas. Si desea enviar datos binarios reales, debe usar FormData.
Si estoy leyendo su pregunta correctamente, está guardando html "captura de pantalla" en el elemento canvas. Si es así, en lugar de leer toDataURL
, debe usar toBlob. Esto le dará datos binarios que podemos enviar mediante FormData
var form = new FormData();
form.append('image', blob, 'image.jpg');
anteriores se pueden enviar mediante regulares XMLHttpRequest
:
var request = new XMLHttpRequest();
request.open('POST', 'http://foo.com/submitform.php');
request.send(form);
Ejemplo de trabajo ->codepen
Si se mira en inspector de cromo verá que se crea la solicitud correcta de varias partes:
------WebKitFormBoundaryGWsPW93HnMPQFcXB
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryGWsPW93HnMPQFcXB--
También puede enviar por encima de formulario con jQuery:
$.ajax({
url: 'http://foo.com/submitform.php',
type: 'POST',
data: form,
processData: false,
contentType: false
});
actualización
Acabo de ver el aviso sobre el manejo de la carga de archivos en el lado del servidor en PHP. El archivo cargado está disponible en array $ _FILES:
imagen
<?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);
?>
usted puede estar interesado por la respuesta en este post http://stackoverflow.com/questions/19148065/how-to-post-binary-file-from-jquery-client-to-java-server- using-rest –