2015-06-08 2 views
0

Я в кодировке Base64 в поле в $ _POST $_POST['nimage'] если эхо его непосредственно в качестве значения Src в качестве img тега, я вижу изображение прекрасно в браузере: echo "<img src='".$_POST['nimage']."'>";Base64Decode to file - whats missing?

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

«изображение«хххх: //myserversomewhere.com/images/ img1.jpg 'не может быть отображен, так как содержит ошибки "

Мой расшифровывает и файл положить являются:

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

что приводит к images/img1.jpg на локальном сервере. Что я делаю неправильно в декодировании здесь? Хотя выход base64 не отображается URLencoded, я пробовал 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

+1

Перед тем, как декодировать данные, вы удаляете заголовок URI данных ('data: image/jpeg; base64,')? –

+0

@HoboSapiens, который был бы быстрым НЕТ ... позвольте мне попробовать и надеяться, что это просто так просто (извините, только 2-х раз мне пришлось манипулировать закодированными данными Base64) – DMSJax

+0

@HoboSapiens не помог - то же самое ошибки, первые 2 строки данных теперь '/ 9J/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAF4AqsDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL' – DMSJax

ответ

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

Спасибо! Я использовал substr(), чтобы удалить URI MIME, но взорваться работает лучше, поэтому я сделаю это изменение. – DMSJax

 Смежные вопросы

  • Нет связанных вопросов^_^