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

Laravel5.8+Vue2项目中POST表单隐藏input如何正确上传文件

问题核心原因

隐藏input的value仅支持字符串类型,你将File对象通过v-model绑定到隐藏input时,Vue会自动将File对象序列化为[object File]字符串,提交到后端自然无法识别为文件类型。


前端修改方案

提供两种可选实现,根据你的业务需求选即可:

方案1:保留原生表单默认提交逻辑

删除你当前写的隐藏input,替换为隐藏的原生文件input,不需要用v-model绑定,原生表单会自动携带文件内容:

<input
    name="documents[0][files]"
    accept="image/*,application/pdf"
    type="file"
    ref="fileInput"
    style="display:none"
    @change="onSelectFile"
>

对应JS方法可以简化,不需要再给files变量赋值:

onSelectFile(e){
    if(!e.target.files.length) return;
    this.selected_file = e.target.files[0];
    // 这里可以加文件预览、文件名展示的逻辑,不需要额外赋值给input
    e.target.value = null;
},

如果需要支持多文件上传,给input加multiple属性,name改为documents[][files][]即可。

方案2:异步提交表单(灵活性更高)

手动构造FormData对象提交,不需要依赖原生表单的默认提交行为:

// 表单提交触发方法
submitForm() {
    const form = document.getElementById('form_register_new_policy_modal')
    const formData = new FormData(form)
    // 手动追加选中的文件,多文件的话循环追加即可
    formData.append('documents[0][files]', this.selected_file)
    // 发送请求
    axios.post(form.action, formData, {
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    }).then(res => {
        // 处理提交结果
    })
}

后端适配修改

你当前的后端代码也存在调用错误,$files['files']本身就已经是上传文件对象,不需要再调用->file('file'),修改addPolicy里的文件存储逻辑:

public static function addPolicy(array $data)
{      
    DB::transaction(function () use($data) {
        if ( isset($data['documents']) ) {
            foreach($data['documents'] as $doc){
                $uploadedFile = $doc['files'];
                $policy->documents()->create([
                    'file' => $uploadedFile->store($policy->employee->urlFolderEmployee(), 'public'),
                    'file_name' => $uploadedFile->getClientOriginalName()
                ]);
            }
        }
        return $policy;
    });
}

同时在StorePolicy表单验证类中补充文件验证规则,确保拿到的是合法上传文件:

public function rules()
{
    return [
        // 其他字段规则
        'documents.*.files' => 'required|file|mimes:jpg,jpeg,png,pdf|max:2048',
    ];
}

内容的提问来源于stack exchange,提问作者DeadMeme

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:27:02