Найти и заменить несколько изображений base64 именами файлов - PullRequest
0 голосов
/ 06 июля 2019

Прежде чем начать, я использую Laravel 5.7 для своего проекта, но любое php-решение подойдет. Я делаю простой редактор на своем сайте, где пользователь может выполнять простое редактирование наряду с добавлением изображений. Я использую contenteditable div для этой цели. Когда я добавляю изображения в div, он добавляется как base64 image. После отправки формы я хочу сохранить эти изображения в виде файлов на стороне сервера, а затем заменить src этих изображений на путь для нового сохранения изображений в строке перед сохранением в базе данных. Я не нашел способа отправить contenteditable div, поэтому я передаю весь текст из div в скрытую текстовую область перед отправкой. поправьте меня, если есть какой-либо другой надежный способ сделать это. Вот что я ищу:

Исходный образец содержания текстовой области в запросе: -

"This is a test post with some images like this one 
<img src="data:image/jpeg;base64,/9j.....long base 64 string...." id="img02">
and it can contain more than one images like here is the second image
<img src="data:image/png;base64,/8Aue.....long base 64 string...." id="img01">
and more images like this"

Предполагаемая мощность: -

"This is a test post with some images like this one  
<img src="my_public_path/Unique_file_name.jpg" id="img02"> 
and it can contain more than one images like here is the second image 
<img src="my_public_path/Unique_file_name.png" id="img01"> 
and more images like this"

Может кто-нибудь указать мне правильное направление или предоставить php-код для достижения этой цели?

1 Ответ

0 голосов
/ 07 июля 2019

Я в конце концов решил свою проблему с помощью следующего кода. Я публикую это здесь на тот случай, если кому-то еще это понадобится.

$stt = $request->storytextTemp; // string containing base64 encoded image files.
preg_match('#data:image/(gif|png|jpeg);base64,([\w=+/]++)#', $stt, $x);
while(isset($x[0]))
{
    $imgdata = base64_decode($x[0]);
    $info = explode(";", explode("/", $x[0])[1])[0];
    $textareaImages = $request->imagesTextarea;

    $imm = Image::make(file_get_contents($x[0]));
    $imp = public_path().'/images/tempStoryImages/';
    $imn = date('y_m_d') . "_" . uniqid().".".$info;
    $imm->save($imp.$imn);

    $stt = str_replace($x[0], 'http://127.0.0.1:8000/images/tempStoryImages/'.$imn, $stt);
    preg_match('#data:image/(gif|png|jpeg);base64,([\w=+/]++)#', $stt, $x);
}
return $stt;

Выше этой программы сохраните все мои изображения в папке tempStoryImages и верните html, чтобы показать все файлы изображений. Теперь я могу сохранить эту возвращенную строку в базе данных с вложенным в нее путем к изображению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...