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

Laravel接收前端Fetch上传文件为空问题求助

解决思路与修复方案

1. 修复前端Content-Type设置问题

这是最可能的根因:当使用FormData作为Fetch的请求体时,不要手动设置Content-Type: multipart/form-data。浏览器会自动生成包含正确boundary标识的Content-Type头,手动设置会丢失这个关键标识,导致Laravel无法解析表单中的文件数据。

修改后的前端代码:

const data = new FormData();
data.append('upload', file);

let response = fetch(api_url, {
    method: 'post',
    headers: {
        'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
        'Accept': 'application/json'
    },
    body: data
})
.then(data => {
    return data;
});

2. Laravel后端代码优化

后端判断文件存在的逻辑可以更严谨,使用Laravel官方提供的hasFile方法:

public function imageUpload(Request $request){
    if($request->hasFile('upload')){
        try{
            // store方法默认存储到storage/app/public目录,若需存到storage/app/storage,直接传'storage'即可
            $file = $request->file('upload')->store('storage');
            return response()->json([
                "status" => true,
                "message" => "File successfully uploaded",
                "file" => $file
            ]);
        }catch(Exception $e){
            return parent::respondWithError("Couldn't store image file: " . $e->getMessage());
        }
    }else{
        return parent::respondWithError("No file present: " . json_encode($request->all()));
    }
}

3. 其他排查方向

  • 路由配置检查:确认接口路由正确使用web中间件(需CSRF验证场景),且请求方式为POST。
  • PHP上传限制:检查php.ini中的upload_max_filesize、post_max_size、max_file_uploads参数,确保上传文件大小未超出限制。
  • 中间件干扰:排查是否有自定义中间件强制解析JSON请求,导致表单数据被忽略。
  • 字段名一致性:确认前端append的字段名upload与后端$request->file('upload')的字段名完全一致(大小写敏感)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:32:07