【发布时间】:2016-12-26 19:58:56
【问题描述】:
我试图从 PUT 请求中获取图像以更新用户图片(使用邮递员),并使其通过 Laravel 5.2 中的验证,以便在邮递员中使用以下网址进行调用:
http://localhost:8000/api/v1/users?_method=PUT
并在正文中发送图像字符串,使用这样的 json:
{
"picture" : "data:image/png;base64,this-is-the-base64-encode-string"
}
在控制器中尝试许多不同的方法来解码图像并尝试通过验证:
-
首先我尝试了这个:
$data = request->input('picture'); $data = str_replace('data:image/png;base64,', '', $data); $data = str_replace(' ', '+', $data); $image = base64_decode($data); $file = app_path() . uniqid() . '.png'; $success = file_put_contents($file, $image); -
然后我尝试了这个:
list($type, $data) = explode(';', $data); list(, $data) = explode(',', $data); $data = base64_decode($data); $typeFile = explode(':', $type); $extension = explode('/', $typeFile[1]); $ext = $extension[1]; Storage::put(public_path() . '/prueba.' . $ext, $data); $contents = Storage::get(base_path() . '/public/prueba.png'); -
尝试使用干预图片库(http://image.intervention.io/),不要通过:
$image = Image::make($data); $image->save(app_path() . 'test2.png'); $image = Image::make(app_path() . 'test1.png');
这是控制器中的验证:
$data = [
'picture' => $image,
'first_name' => $request->input('first_name'),
'last_name' => $request->input('last_name')
];
$validator = Validator::make($data, User::rulesForUpdate());
if ($validator->fails()) {
return $this->respondFailedParametersValidation('Parameters failed validation for a user picture');
}
这是用户模型中的验证:
public static function rulesForUpdate() {
return [
'first_name' => 'max:255',
'last_name' => 'max:255',
'picture' => 'image|max:5000|mimes:jpeg,png'
];
}
【问题讨论】:
-
我没有关注。您面临的问题是什么?
-
无法通过 base64 字符串创建的图像的验证
标签: php json validation laravel laravel-5.2