我正在使用mysql将base64图像以及一些表格数据从邮递员发送到laravel 5。代码运行良好并返回成功json。来自json的所有值都存储在mysql中,但json图像路径不存储在数据库中,而是一些代码存储在数据库中。
我在postman中的实际json响应是=>
{"success":{"userid":"4","fname":"s","lname":"s","img":"uploads\/5a3f6218a1ed0.jpg"}}
以上所有json值都存储在数据库中,但不存储img json路径,而是将数据存储在数据库中。
/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs
我的Laravel API代码
public function add(Request $request)
{
$validator = Validator::make($request->all(), [
'userid' => 'required',
'fname' => 'required',
'lname' => 'required',
'img' => 'required',
]);
if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 401);
}
$input = $request->all();
$user = News::create($input);
$success['userid'] = $user->userid;
$success['fname'] = $user->fname;
$success['lname'] = $user->lname;
if ($user->img)
{
$img2 = $user->img;
$img3 = str_replace('data:image/jpg;base64,', '', $img2);
$img3 = str_replace(' ', '+', $img3);
$data = base64_decode($img3);
$file = 'uploads/' . uniqid() . '.jpg';
file_put_contents($file, $data);
$imgfile = $file;
$success['img'] = $imgfile;
}
return response()->json(['success'=>$success], $this->successStatus);
}
实际上我错过了什么......
答案 0 :(得分:1)
这是因为你保存了这样的记录:
$user = News::create($input);
所以你不要将$imgfile
保存在数据库中。
您可以添加:
$success['img'] = $imgfile;
更新记录的以下行
$user->update(['img' => $imgfile]);
或者您可以更改代码的顺序,以便稍后使用有效的News
字段创建img
记录。
另请注意,您使用的是错误的变量名称。拥有$user
模型的News
变量是没有意义的。
答案 1 :(得分:1)
正如Marcin上面所述,因为你没有将imgfile保存到数据库中。
我还会考虑重构一些代码,这样add方法就不那么冗长了。考虑类似下面的代码块。请注意,没有使用任何使用语句,没有实现try / catch。
我还发现,提供更全面的变量和属性名称通常更好。比如fname,我会根据上下文调用first_name / firstName。
<?php
class ApiController
{
/**
* Add news item
*
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function add(Request $request)
{
$validator = $this->validateData($request);
if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 422);
}
$news = News::create($request->all());
if ($news) {
$success['userid'] = $news->userid;
$success['fname'] = $news->fname;
$success['lname'] = $news->lname;
$success['img'] = $this->uploadImage($news);
$news->update(['img' => $success['img']]);
return response()->json(['success'=>$success], $this->successStatus);
}
return response()->json(['error'=>'An Error occurred when creating the news item'], 422);
}
/**
* Upload Image and return file name
*
* @param $news
* @return string
*/
protected function uploadImage($news)
{
$image = $news->img;
$image = str_replace('data:image/jpg;base64,', '', $image);
$image = str_replace(' ', '+', $image);
$data = base64_decode($image);
$file = 'uploads/' . uniqid() . '.jpg';
file_put_contents($file, $data);
return $file;
}
/**
* Validate inbound request
*
* @param $request
*/
protected function validateData($request)
{
Validator::make($request->all(), [
'userid' => 'required',
'fname' => 'required',
'lname' => 'required',
'img' => 'required',
]);
}
}