Base64 Декодировать в файл — чего не хватает?

У меня в base64 закодирована строка в поле $ _POST $_POST['nimage'] если я повторяю это непосредственно как значение SRC в img тег, я вижу изображение просто отлично в браузере: echo "<img src='".$_POST['nimage']."'>";

Теперь я явно пропускаю шаг, потому что, когда я base64_decode строку и записать ее в файл локально на сервере, попытка просмотра созданного файла в браузере приводит к ошибке:

«Изображение« xxxx: //myserversomewhere.com/images/img1.jpg »не может быть отображено, поскольку оно содержит ошибки»

Мой декодер и файл положены:

$file = base64_decode($_POST['nimage']);
file_put_contents('images/'. $_POST['imgname'], $file);

что приводит к images/img1.jpg на локальном сервере. Что я делаю не так в декодере здесь? Несмотря на то, что вывод base64, по-видимому, не является URL-кодированным, я попытался использовать urldecode () на нем перед base64_decode () просто для безопасной меры с теми же результатами.

Первые несколько строк кода base64:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAF4AqsDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD2gJt+XPJPUGv2A/NB2044oAdtY9M8ccCgB6r8+0jtSYDxEW4xz2qQFCnGOPQ0AAQDJIz9KAF8rI6/hQA9Y+SBgjHIqWA5Yxz2xUsBwUdAMdzSAcFGAB0NADgCVK/KB/OgB6BNzc49agse2OgX2BFZvcCRUO7g

0

Решение

К данным, которые вы декодируете, прикреплен заголовок URI данных:

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...

Заголовок используется браузером для определения типа файла и кодировки, но не является частью закодированных данных.

Снять заголовок (data:image/jpeg;base64,) из данных и base64 расшифровывают все остальное, прежде чем записать его в файл.

$b64 = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD...';
$dat = explode(',' $b64);

// element 1 of array from explode() contains B64-encoded data
if (($fileData = base64_decode($dat[1])) === false) {
exit('Base64 decoding error.');
}
file_put_contents($someFileName, $fileData);

NB. Проверьте возвращаемое значение вашего звонка base64_decode() за false и прервать как-нибудь с сообщением. Это приведет к возникновению проблем с процессом декодирования (например, не удаляя заголовок!).

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]