Livewire v4 makes file uploads simple.
Component
use Livewire\WithFileUploads;
class PhotoUpload extends Component
{
use WithFileUploads;
#[Validate('image|max:1024')]
public $photo;
public function save(): void
{
$this->validate();
$this->photo->store('photos', 'public');
}
}Template
<input type="file" wire:model="photo">
<div wire:loading wire:target="photo">Uploading...</div>