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),因为它似乎想将文件存储为数据图像。
您应该再看一下文档中的 all 和 instructions 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;
}
}
我正在尝试将文件(国家国旗)上传到一个简单的 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),因为它似乎想将文件存储为数据图像。
您应该再看一下文档中的 all 和 instructions 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;
}
}