Загрузка изображений в базу данных в Laravel 8: методы и примеры кода

Загрузить изображение в базу данных в Laravel 8 можно различными способами. В этой статье блога я объясню несколько подходов на примерах кода. Давайте углубимся в это!

Метод 1: сохранение пути к изображению в базе данных

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

  1. Создайте миграцию, чтобы добавить новый столбец в соответствующую таблицу:
    php artisan make:migration add_image_path_to_table --table=your_table_name
  2. Откройте созданный файл миграции и добавьте следующий код в метод up:
    public function up()
    {
    Schema::table('your_table_name', function (Blueprint $table) {
        $table->string('image_path')->nullable();
    });
    }
  3. Запустите миграцию, чтобы добавить новый столбец в таблицу:
    php artisan migrate
  4. Создайте форму для загрузки файла изображения и обновления записи базы данных:
    <form method="POST" action="/upload" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
    </form>
  5. Обработайте отправку формы в контроллере и сохраните файл изображения в нужном каталоге:
    public function upload(Request $request)
    {
    $imagePath = $request->file('image')->store('images');
    // Save the $imagePath to the database
    // ...
    }

Метод 2: сохранение большого объекта изображения в базе данных

В этом методе мы сохраняем файл изображения в виде большого двоичного объекта непосредственно в базе данных.

  1. Создайте миграцию, чтобы добавить новый столбец в соответствующую таблицу:
    php artisan make:migration add_image_blob_to_table --table=your_table_name
  2. Откройте созданный файл миграции и добавьте следующий код в метод up:
    public function up()
    {
    Schema::table('your_table_name', function (Blueprint $table) {
        $table->binary('image_blob')->nullable();
    });
    }
  3. Запустите миграцию, чтобы добавить новый столбец в таблицу:
    php artisan migrate
  4. Создайте форму для загрузки файла изображения и обновления записи базы данных:
    <form method="POST" action="/upload" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
    </form>
  5. Обработка отправки формы в контроллере и сохранение файла изображения в виде большого двоичного объекта в базе данных:
    public function upload(Request $request)
    {
    $imageFile = $request->file('image');
    $imageBlob = file_get_contents($imageFile);
    // Save the $imageBlob to the database
    // ...
    }

Метод 3. Использование пакета

В качестве альтернативы вы можете использовать пакеты Laravel, такие как «spatie/laravel-medialibrary» или «intervention/image», чтобы упростить процесс загрузки изображений. Эти пакеты предоставляют удобные методы обработки загрузки и хранения изображений.

Вот пример использования пакета «spatie/laravel-medialibrary»:

  1. Установите пакет через Composer:
    composer require spatie/laravel-medialibrary
  2. Настройте пакет, опубликовав его файл конфигурации:
    php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config"
  3. Добавьте черту HasMediaв свою модель:

    use Spatie\MediaLibrary\HasMedia;
    use Spatie\MediaLibrary\InteractsWithMedia;
    class YourModel extends Model implements HasMedia
    {
    use InteractsWithMedia;
    
    // ...
    }
  4. Создайте форму для загрузки файла изображения и обработайте загрузку в контроллере:
    <form method="POST" action="/upload" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
    </form>
    public function upload(Request $request)
    {
    $model = YourModel::find($id);
    $model->addMediaFromRequest('image')->toMediaCollection('images');
    // ...
    }

Это всего лишь несколько способов загрузки изображений в базу данных в Laravel 8. Вы можете выбрать тот, который лучше всего соответствует вашим требованиям и предпочтениям реализации.