2017-12-24 16 views
0

私はbase64イメージをいくつかのフォームデータと共にmysqlを使ってpostmanからlaravel 5に送信しています。コードは正常に動作し、成功したjsonも返します。 jsonの値はすべてmysqlに格納されますが、jsonのイメージパスはデータベースに格納されず、代わりにdatabseに格納されます。Laravel 5 jsonレスポンスイメージパスはmysqlデータベースに保存されていません

郵便配達マイ実際のJSONレスポンスがすべてJSON値を上記=>

{"success":{"userid":"4","fname":"s","lname":"s","img":"uploads\/5a3f6218a1ed0.jpg"}} 

あるがdatabseに格納されているが、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); 
} 

です...

答えて

1

あなたは、このような記録を保存するためです:

$user = News::create($input); 

だからドン$imgfileをデータベースに保存しないでください。

あなたは後に追加することができます。

$success['img'] = $imgfile; 

記録

$user->update(['img' => $imgfile]); 

か、すでに有効なimgフィールドで、後でNewsレコードを作成するようにコードの順序を変更することができますを更新するために、以下の行を。

間違った変数名を使用していることにも注意してください。 $userにはNewsモデルを保持する変数はありません。

1

Marcinは上記のように、imgfileをデータベースに保存していないためです。

また、コードの一部をリファクタリングして、addメソッドがあまり冗長でないようにすることも考えています。次のようなコードブロックを考えてみましょう。 try/catchが実装されていないuseステートメントは使用されていないことに注意してください。

また、一般的には、変数とプロパティの完全な名前を付ける方が良いことがわかりました。 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', 
     ]); 
    } 

} 
+0

この解決策も働いています...私はあなたに感謝しています、あなたはすべてのものを精緻化しました.... –

関連する問題