Как изменить способ сохранения изображений для статей в Laravel Backpack, избегая хранения их в БД в виде Base64? Имеет ли смысл использовать LONG TEXT поле в БД для хранения изображений, учитывая, что их размер колеблется в пределах 2-4 МБ, а максимальный размер - 10 МБ?
Хранение изображений в базе данных в формате base64 не является оптимальным решением, так как это увеличивает размер базы данных и замедляет доступ к данным изображений. Рекомендуется хранить изображения на сервере или в облачном хранилище, а в базе данных хранить ссылки или пути к этим изображениям. Для изменения способа сохранения изображений для статей в Laravel Backpack можно воспользоваться пакетами для управления файлами, такими как Laravel Filesystem. Можно создать отдельную таблицу для хранения путей к изображениям, а затем загружать изображения на сервер и сохранять их путь в базе данных. Использование LONG TEXT поля в базе данных для хранения изображений с размером от 2 до 4 МБ является возможным, но не самым эффективным. Рекомендуется использовать тип данных BLOB для хранения бинарных данных, таких как изображения. Если размер изображения не превышает 10 МБ, то BLOB должен быть достаточным для хранения изображения в базе данных. Однако, для лучшей производительности и масштабируемости рекомендуется хранить изображения на сервере и ссылаться на них из базы данных.
Стоит ли хранить изображения base64 в БД?
нет
composer require symfony/dom-crawler
use Symfony\Component\DomCrawler\Crawler; use Illuminate\Support\Facades\Storage; use Illuminate\Http\File; $desc = $request->input('some_html'); // POST with html $dom_desc = new Crawler($desc); $images = $dom_desc->filterXPath('//img')->extract(array('src')); // extract images foreach ($images as $key => $value) { if (strpos($value, 'base64') !== false) { // leave alone not base64 images $data = explode(',', $value); // split image mime and body $tmp_file = tempnam('/tmp', 'items'); // create tmp file path file_put_contents($tmp_file, base64_decode($data[1])); // fill temp file with image $path = Storage::putFile('public/items', new File($tmp_file)); // put file to final destination $desc = str_replace($value, $path, $desc); // replace src of converted file to fs path unlink($tmp_file); // delete temp file } }