Добавьте следующие три свойства в ваш вызов jQuery Ajax, они необходимы для больших двоичных объектов:
cache: false,
contentType: false,
processData: false
Тогда не используйте formData в свойстве data вашего Ajax Call, вам просто нужно добавить созданный BLOB-объект.
Также добавьте небольшой обратный вызов рендеринга (кроме уже используемого файла console.log) для печати изображения. Ваш AJAX-вызов выглядит так:
$.ajax({
type: 'POST',
url: 'check.php',
data: blob,
cache: false,
contentType: false,
processData: false
}).done(function(data) {
document.write("<img src='"+data+"'></img>");
})
Измените ваш PHP-код на следующий:
<?php
$res = file_get_contents("php://input");
echo "data:image/jpg;base64,".base64_encode($res);
?>
Что касается использования " php: // input ". Он возвращает все необработанные данные, которые идут после заголовков вашего запроса, и ему все равно, какой это тип, что довольно удобно в большинстве случаев. Принимая во внимание, что $ _ POST будет переносить только те данные, которые были переданы, со следующими типами содержимого:
- применение / х-WWW-форм-urlencoded
- многочастному / форм-данных * * тысяча двадцать-один
Если вы действительно хотите использовать FormData , вы можете изменить запрос следующим образом:
$.ajax({
type: 'POST',
url: 'check.php',
data: formData,
cache: false,
contentType: false,
processData: false
}).done(function(data) {
console.log(data);
})
И вы также должны изменить свой PHP-файл, чтобы получить $ _ FILE . Отправляя данные таким способом, Content-Type запроса будет «multipart / form-data», который будет содержать BLOB-объекты, изображения и, как правило, файлы в $ _ FILES , а остальные в $ _ POST , поэтому " php: // input " не поможет.
<?php
var_dump($_FILES);
?>
Также имейте в виду, что при загрузке BLOB-объектов таким способом они получат случайное имя, если вы не собираетесь генерировать имена файлов на стороне сервера (что вам, вероятно, следует делать в большинстве случаев) и хотите указать конкретное имя, обозначенное добавив его, вы можете передать его вместе с FormData, например:
formData.append('blobImage',blob, "MyBloBName");