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

如何将Vue前端上传的文件正确传递到Laravel控制器并成功获取?

问题根源

你当前的写法是将File对象直接放在普通JavaScript对象中传递给axios,axios默认会将请求体序列化为JSON格式,而文件上传必须使用multipart/form-data编码的FormData格式传输,因此Laravel无法识别到上传的文件字段。你之前手动设置Content-Type但没搭配FormData使用,自然没有效果。

完整修复步骤

1. 构造FormData对象

在Vue侧组装请求参数时,必须使用FormData实例,需要把文件本身追加到FormData中,不能只传文件名:

const formData = new FormData();
// 追加文件本身,字段名对应后端要取的file
formData.append('file', this.form.file);
// 其他普通字段也可以直接追加
formData.append('document_type', this.form.document_type);
formData.append('name', this.form.file.name);
// 把组装好的formData传给store
this.$store.dispatch('uploadDocument', formData)

2. 调整Store中axios请求逻辑

直接传入FormData实例即可,不需要手动设置Content-Type,axios会自动生成带boundary标识的multipart/form-data请求头,手动设置反而可能因为缺失boundary导致解析失败:

axios.post('/users/newDocument', formData)

3. Laravel控制器中获取数据

普通字段用$request->get()获取,上传的文件需要用$request->file()方法获取,校验文件是否上传成功用$request->hasFile('file'):

public function store(Request $request)
{   
    // 校验文件是否存在
    if ($request->hasFile('file')) {
        // 获取上传的文件实例
        $file = $request->file('file');
        // 获取普通字段
        $documentType = $request->get('document_type');
        $fileName = $request->get('name');
        // 后续文件存储、业务逻辑处理
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:45:06