Laravel+Vue+InertiaJS在DigitalOcean生产环境PUT上传图片失败
Laravel 11 + Vue 3 + InertiaJS 生产环境图片上传异常
问题现象
- 本地环境下图片上传功能完全正常,但部署到DigitalOcean生产环境后无法工作
- 生产环境中图片未上传成功,数据库存储的是
0而非正常的文件路径 - 原本正常的POST表单,改成处理图片上传的POST请求后同样失败
前端实现逻辑
点击按钮打开模态框选择已有照片的球员,表单会填充该球员数据,文件输入框可选择新照片并加入InertiaJS表单。由于PHP无法直接通过PUT方法发送文件,在useForm中加入_method: 'PUT'来覆盖POST方法:
- 点击
@click="openUpdatePlayer(user)"打开模态框时,用当前照片填充字段:formPlayer.photo = player.photo;
文件字段代码
<TextInput id="photo" name="photo" type="file" placeholder = "Foto del jugador" class="mt-1 block w-full border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-indigo-500 dark:focus:ring-indigo-600 rounded-md shadow-sm" @input="formPlayer.photo = $event.target.files[0]" /> <PrimaryButton class="ms-3" :class="{ 'opacity-25': formPlayer.processing }" :disabled="formPlayer.processing" @click="updatePlayer()" > Actualizar </PrimaryButton>
表单定义代码
const formPlayer = useForm({ //仅展示部分字段 weight: 0, height: 0, email: null, photo: null, _method: 'PUT' });
提交逻辑代码
const updatePlayer = () => { formPlayer.post(route('playerUpdate', formPlayer.id), { //onFinish: () => formPlayer.reset(), onSuccess: () => closePlayerModal(), }); };
后端控制器代码
if ($request->hasFile('photo')) { $image = $request->file('photo')->store('photos', 'public'); $user->photo = $image; } else { dd('error uploading photo', $request->file('photo')); }
内容的提问来源于stack exchange,提问作者Marco Feregrino
相关产品推荐
相关产品推荐

