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()解决它,