You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+Vue+InertiaJS在DigitalOcean生产环境PUT上传图片失败

Laravel 11 + Vue 3 + InertiaJS 生产环境图片上传异常

问题现象

  • 本地环境下图片上传功能完全正常,但部署到DigitalOcean生产环境后无法工作
  • 生产环境中图片未上传成功,数据库存储的是0而非正常的文件路径
  • 原本正常的POST表单,改成处理图片上传的POST请求后同样失败

前端实现逻辑

点击按钮打开模态框选择已有照片的球员,表单会填充该球员数据,文件输入框可选择新照片并加入InertiaJS表单。由于PHP无法直接通过PUT方法发送文件,在useForm中加入_method: 'PUT'来覆盖POST方法:

  1. 点击@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:23:23