Laravel 背包未上传图片

Laravel Backpack not uploading image

我正在尝试将文件(国家国旗)上传到一个简单的 table 国家,该文件应保存在 public 的 "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),因为它似乎想将文件存储为数据图像。

您应该再看一下文档中的 allinstructions for the image field type。 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;
    }
}