Как записать картинку/видео из blob в файл?

Существует ссылка на blob(в данном случае, это png-картинка) - blob:https://localhost/d59ff69d-f098-4006-b67f-633e25d13a24. Каким способом можно сохранить картинку на серваке используя данный BLOB? При попытке сохранить, файл либо сохранялся полностью пустым, либо весил несколько десятков байт. Вот пример кода:

$file = $data['media']['preview'];//получаю blob
$newFile = fopen($_SERVER['DOCUMENT_ROOT'].'/uploads/tmp/'.$name,'w+');//открываю файл, если его нет - создаю

$image = imagecreatefromstring($file); // пытаюсь преобразовать blob в изображение

fwrite($newFile,$image);
fclose($newFile);

Как можно решить данную проблему?

ОБНОВЛЕНО Используя XHR попробовал достать изображение из буфера по BLOB URL и получил XHR ответ. Теперь вопрос, как достать изображение из этого ответа..?

let blobURL = 'blob:http://localhost:3000/d4635d71-de54-4154-bd90-73f39ead87ad'
let xhr = new XMLHttpRequest();

xhr.responseType = "blob";
xhr.onload = function() {
  let recoveredBlob = xhr.response

  let reader = new FileReader()

  reader.onload = function() {
    let blobAsDataUrl = reader.result
    window.location = blobAsDataUrl        //(*)
  }

  reader.readAsDataURL(recoveredBlob)
}
xhr.open("GET", blobURL)
xhr.send()
Также, в консоли светится ошибка, ругающаяся на строку, помеченной (*) выше Not allowed to navigate top frame to data URL: data:image/png;base64,R0lGODlhAAQABPcAAAAAAOYD5QOa5ZvoA+jo5wNi5u....

ОБНОВЛЕНО В ошибке, которая была в консоли (*) было сказано, что он не может открыть данную ссылку в новом окне. Ещё немного почитав про сам формат BLOB, понял, что его можно декодировать используя метод base64_decode, получив тем самым нужное изображение прямиком из буфера обмена.


Ответы (1 шт):

Автор решения: Антон

Если я правильно понял вопрос, то вам необходимо использовать base64_decode($file), чтобы декодировать картинку для использования функции imagecreatefromstring. Пример:

$file = file_get_contents('file.blob');

$image = imagecreatefromstring(base64_decode($file));

header('Content-Type: application/png');

echo imagepng($image);
imagedestroy($image);
→ Ссылка