Technicznie base64 jest reprezentacja tekst danych binarnych - jeśli są w porządku z tego powyższe odpowiedzi są prawidłowe. Jeśli chcesz wysłać prawdziwe dane binarne, musisz użyć FormData.
Jeśli poprawnie odczytuję twoje pytanie, zapisujesz html "zrzut ekranu" w elemencie canvas. Jeśli tak, zamiast przeczytać toDataURL
, powinieneś użyć toBlob. To daje dane binarne, które możemy wysłać za pomocą FormData
var form = new FormData();
form.append('image', blob, 'image.jpg');
powyżej można wysłać za pomocą regularnych XMLHttpRequest
:
var request = new XMLHttpRequest();
request.open('POST', 'http://foo.com/submitform.php');
request.send(form);
przykład roboczych ->codepen
Jeśli będziesz wyglądać na chromowane inspektora zobaczysz, że zostało utworzone poprawne żądanie wieloczęściowe:
------WebKitFormBoundaryGWsPW93HnMPQFcXB
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryGWsPW93HnMPQFcXB--
Można również wysłać powyżej formularza z jQuery:
$.ajax({
url: 'http://foo.com/submitform.php',
type: 'POST',
data: form,
processData: false,
contentType: false
});
Aktualizacja
prostu zobaczyłem zawiadomienie o obsługę wysyłania pliku po stronie serwera w PHP. Przesłany plik jest dostępny w tablicy $ _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);
?>
Możesz być zainteresowany o odpowiedź w tym poście http://stackoverflow.com/questions/19148065/how-to-post-binary-file-from-jquery-client-to-java-server- using-rest –