Backpack 5 for Laravel将文件保存到Web服务器的临时文件夹中

a8jjtwal  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(113)

我使用的是Backpack 5 for Laravel的免费版本作为我的管理面板。此外,我使用Laravel 10.13和PHP 8.2.6。我一直在尝试创建一个功能来为我的博客文章添加图片,但是每当我保存文件时,它会显示在我的数据库中以下路径:*C:\wamp64\tmp\phpEF80.tmp * 但是,我需要将我的文件保存在public/images/news中。请问你能帮我解决这个问题吗?我在谷歌上搜索过,甚至找不到类似的解决方案。主要是人们有问题与错误的目录,或他们大炮打开文件,但似乎没有人有问题与保存文件到临时目录的web服务器。重新启动服务器并清理缓存或运行php artisan optimize都无济于事。在Controller和Model中使用public作为磁盘也会产生同样的问题。

迁移文件

Schema::create('news', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('article');
            $table->string('main_picture_path');
            $table->timestamps();
        });

型号

use CrudTrait;
    use HasFactory;

    protected $fillable = [
        'title',
        'article',
        'main_picture_path'
    ];

    public function setImageAttribute($value)
    {
        $attribute_name = "main_picture_path";
        $disk = "images";
        $destination_path = "news";

        $this->uploadFileToDisk($value, $attribute_name, $disk, $destination_path);
    }

CRUD控制器

protected function setupCreateOperation()
    {
        CRUD::setValidation(NewsRequest::class);

        CRUD::field('title');
        CRUD::field('article');
        $this->crud->addField([
            'name' => 'main_picture_path',
            'label' => 'main_picture_path',
            'type' => 'upload',
            'upload' => true,
            'disk' => 'images',
        ]);
    }

文件系统

'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
            'throw' => false,
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
        ],

        'images' => [
            'driver' => 'local',
            'root' => public_path('images'),
        ],

    ]

我需要我的文件保存在公共/图像/新闻。我在谷歌上搜索过,甚至找不到类似的解决方案。似乎没有人在将文件保存到Web服务器的临时目录中时遇到问题。重新启动服务器并清理缓存或运行php artisan optimize都无济于事。在Controller和Model中使用public作为磁盘也会产生同样的问题。此外,我尝试在我的modal中编写简单的调试代码,在 setImageAttribute 方法中,但它根本不起作用,没有任何输出:

$attribute_name = "main_picture_path";

if (!request()->hasFile($attribute_name)) {
    throw new \Exception('No file was uploaded');
}

if (!request()->file($attribute_name)->isValid()) {
    throw new \Exception('Uploaded file is not valid');
}

throw new \Exception('IT SHOULD WORK');
flvlnr44

flvlnr441#

mutator应该在方法名中有属性名。在我的例子中,我将mutator称为 setImageAttribute,我的属性名为 main_picture_path,因此为了让一切都能完美地工作,mutator应该命名为如下:setMainPicturePathAttribute。**文档中没有提到它,几个小时的努力工作帮助我找到了解决方案。

相关问题