Laravel Backpack не загружает изображение - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь загрузить файл (флаг страны) в простую таблицу стран, которую следует сохранить в общедоступной папке «flags».

В моем объявлении поля добавления у меня есть

$this->crud->addField([ // image
          'label' => "flag",
          'name' => "flag",
          'type' => 'image',
          'upload' => true,
          'disk' => 'flags', // in case you need to show images from a different disk
          'prefix' => 'flags/'

и в файле файловых систем у меня есть:

'flags' => [
        'driver' => 'local',
        'root' => public_path('flags'),
        'url' => '/flags',
        'visibility' => 'public',
    ],

Когда я загружаю, он говорит мне, что поле слишком короткое (это varchar 255), так как кажется, что он хочет сохранить файл как данныеизображение.

1 Ответ

0 голосов
/ 01 декабря 2018

Вам следует еще раз взглянуть на все инструкции для типа поля изображения в документации.Backpack не заботится о загрузке за вас - вам нужен аксессуар на вашей модели , чтобы вы могли выбирать, куда он будет загружен и как.Если вы этого не сделаете, Backpack попытается сохранить его как Base64 в вашей базе данных - что не очень хорошая идея в большинстве случаев.

Пример средства доступа для flag:

public function setFlagAttribute($value)
{
    $attribute_name = "flag";
    $disk = "public_folder";
    $destination_path = "uploads/folder_1/subfolder_3";

    // if the image was erased
    if ($value==null) {
        // delete the image from disk
        \Storage::disk($disk)->delete($this->{$attribute_name});

        // set null in the database column
        $this->attributes[$attribute_name] = null;
    }

    // if a base64 was sent, store it in the db
    if (starts_with($value, 'data:image'))
    {
        // 0. Make the image
        $image = \Image::make($value)->encode('jpg', 90);
        // 1. Generate a filename.
        $filename = md5($value.time()).'.jpg';
        // 2. Store the image on disk.
        \Storage::disk($disk)->put($destination_path.'/'.$filename, $image->stream());
        // 3. Save the path to the database
        $this->attributes[$attribute_name] = $destination_path.'/'.$filename;
    }
}
...