可以按照以下步骤通过 InertiaJS 和 Laravel 8 上传照片:
- 在我们的 VueJS 组件中
HTML
:
<input type="file" class="hidden"
ref="photo"
@change="updatePreview">
<div v-show="preview">
<span class="block w-20 h-20 rounded-full"
:style="'width: 5rem; height: 5rem; border-radius: 999px; display: block; background-size: cover; background-repeat: no-repeat; background-position: center center; background-image: url(\'' + photoPreview + '\');'">
</span>
</div>
- 在我们的
methods
对象中:
updatePhotoPreview() {
const reader = new FileReader();
reader.onload = (e) => {
this.preview = e.target.result;
};
reader.readAsDataURL(this.$refs.photo.files[0]);
},
storePhoto() {
if (this.$refs.photo) {
this.form.photo = this.$refs.photo.files[0]
}
this.form.post(route('photo.store'), {
preserveScroll: true
});
},
- 在我们的
data
函数中:
data() {
return {
form: this.$inertia.form({
'_method': 'PUT',
photo: null,
}, {
resetOnSuccess: false,
}),
preview: null,
}
},
- 在我们的 Laravel 中
Controller
:
class PhotoController
{
public function store(array $input)
{
Validator::make($input, [
'photo' => ['nullable', 'image', 'max:1024'],
]);
if (isset($input['photo'])) {
$photo->storePublicly();
}
}
}