我需要通过将图像排队将文件上传到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
答案 0 :(得分:1)
您将必须传递一些可以序列化的内容。
一种简单的方法(因为看起来您正在存储临时文件)是将临时文件名和路径传递给您的工作,该工作将处理其余的工作。
类似的事情应该起作用:
您的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');
}
}
这很粗糙,但应该可以指引您正确的方向。