Php 如何使用Livewire上传作业文件?

Php 如何使用Livewire上传作业文件?,php,laravel,laravel-livewire,Php,Laravel,Laravel Livewire,我需要将图像排队上传到S3,然后使用Livewire上传到S3 我的livewire组件: class s3 extends Component { use WithFileUploads; public $image; public function save() { $this->validate(['image' => 'image']); dispatch(new ImageUpload($this->

我需要将图像排队上传到
S3
,然后使用Livewire上传到
S3

我的livewire组件:

class s3 extends Component
{
    use WithFileUploads;

    public $image;

    public function save()
    {
        $this->validate(['image' => 'image']);

        dispatch(new ImageUpload($this->image));

        return 'success';
    }
}
队列工作的我的作业类:

class ImageUpload implements ShouldQueue
{
    
    public $image;

    public function __construct($image)
    {
        $this->image = $image;
    }

    public function handle()
    {
        Storage::disk('s3')->put('uploads/product_images/', $this->image, 'public');
    }
}
我得到了这个错误::

Exception
Serialization of 'Livewire\TemporaryUploadedFile' is not allowed

您必须传递一些可以序列化的内容

有一种方法(因为看起来您正在存储临时文件)就是将临时文件名和路径传递给您的作业,该作业将处理其余的文件

像这样的方法应该会奏效:

您的Livewire组件:

class s3 extends Component
{
    use WithFileUploads;

    public $image;

    public function save()
    {
        $this->validate(['image' => 'image']);

        $image = [
            'name' => $this->image->getClientOriginalName(),
            'path' => $this->image->getRealPath(),
        ];

        dispatch(new ImageUpload($image));

        return 'success';
    }
}
你的职业类别:

class ImageUpload implements ShouldQueue
{
    
    public $image;

    public function __construct($image)
    {
        $this->image = $image;
    }

    public function handle()
    {
        Storage::disk('s3')->put('uploads/product_images/'.$this->image['name'], file_get_contents($this->image['path']), 'public');
    }
}

这很粗糙,但应该会让你走上正确的方向。

非常感谢!如何散列图像的名称?我用:'name'=>this->image->hasName()解决它,