我正在使用Postman测试文件上传,但我总是遇到此错误。我已经尝试在Postman请求中添加和删除标题“multipart / form-data”而没有结果。
我的代码:
public function update(Request $request, $id) {
$validator = Validator::make($request->all(), [
'name' => 'string|max:255',
'second_name' => 'string|max:255',
'description' => 'string|max:255',
'gender' => 'string|max:255',
'admin' => 'boolean',
'birthday' => 'string|max:255',
'email' => 'string|email|max:255|unique:users',
'password' => 'min:6|required_with:password_confirmation|same:password_confirmation',
'file' => 'file',
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 401);
}
$user = User::find($id);
$user->name = $request->input('name');
$user->second_name = $request->input('second_name');
$user->description = $request->input('description');
$user->gender = $request->input('gender');
$user->admin = $request->input('admin');
$user->birthday = $request->input('birthday');
$user->email = $request->input('email');
$user->imageUrl = $request->file('file')->store('images');
if($user->save()) {
return new $user;
}
}
答案 0 :(得分:1)
您收到错误,因为您的请求中未正确设置文件。
由于$request->file('file')
返回null,并且您尝试在null上调用方法,导致异常。
当使用Postman向Laravel发出PUT或PATCH请求时,必须采取与平常略有不同的方法。
由于Laravel处理PUT和PATCH请求的方式,您需要在Postman中将请求作为POST请求发送,并在标头中提供值_method
PUT
。这就是Laravel所期望的。
如果这是必填字段,我还建议将文件的验证规则更改为以下内容:
'file' => 'file|required'
这样可以更轻松地排查API。如果在请求中未检测到文件,则将提供JSON错误响应。