如何使用Laravel Http客户端向blob类型API上传更新图片
问题原因
你的代码存在两个核心问题导致图片上传失效:
Http客户端的attach()方法缺少必要的文件名参数,后端接收form-data格式的blob文件时,需要解析文件名/后缀完成校验逻辑,缺失该参数会直接被后端过滤忽略该上传字段- 没有做有效的文件存在性判断,当未上传图片时
file_get_contents($image)会抛出异常,也没有兼容无需更新图片的场景
修正后代码
$image = $request->file('profile_image'); $http = Http::withToken($request->session()->get('user'))->acceptJson(); // 仅当存在有效上传文件时附加图片 if ($image && $image->isValid()) { // attach三个参数分别为:接口接收的字段名、图片二进制内容、文件名 $http->attach('image', $image->get(), $image->getClientOriginalName()); } $response = $http->post("https://voice.infidea.id/api/gateway/update-user", [ 'id' => $user['id'], 'name' => $request->name, 'email' => $request->email, 'contact' => $request->contact ]);
额外调试建议
如果修改后仍然失效,可以打印请求日志排查参数格式:
- 在请求前加上
->withOptions(['debug' => true]),输出请求的详细报文,对比Postman的请求报文差异,确认image字段的格式、参数名是否和Postman测试时完全一致
内容的提问来源于stack exchange,提问作者Qube
相关产品推荐
相关产品推荐

