Изображение не сохраняется / не обновляется в базе данных с помощью Laravel

#laravel #image #api

#laravel #изображение #API

Вопрос:

Я пытаюсь сохранить свое изображение в базе данных при создании своего пользователя, и для этого я использую postman

Мой код:

 public function register(Request $request) {

    $body = $request->all();

    $userProfile = $body['user_profile'];
    $userPrev = $body['privileges'];
    $userProfile['is_super_admin'] = $userPrev['is_super_admin'];
    $facilities = $userPrev['facilities'];

    $bodyObj = array_merge($userProfile, $userPrev);

    $validator = UserValidations::validateUser($bodyObj);

    if ($validator->fails()) {
        return response([
            'status' => false,
            'message'   => __('messages.validation_errors'),
            'errors' => $validator->errors()->all()
        ], 200);
    }

    DB::beginTransaction();

    try {

        If (Input::hasFile('image')) {

            $file = Input::file('image');

            $destinationPath = public_path() . '/profile_images/';
            $filename = $file->getClientOriginalName();

            $file->move($destinationPath, $filename);

            $this->user->where('id', Auth::user()->id)->update(['profile_pic' => $filename]);
        }
 

Мой пользователь создан и сохранен в базе данных, а изображение — нет.
Ваша помощь будет высоко оценена!

Ответ №1:

Я действительно в замешательстве. Вы хотите сохранить изображение в базе данных (плохая идея). Во-вторых, вы хотите сохранить изображение в базе данных, но вы сохраняете только имя файла.

Предложение: если вы хотите сохранить изображения в базе данных, у вас есть возможность преобразовать его в base64 и сохранить строку. При извлечении вы можете декодировать base64. Например:

 $file = Input::file('image');    
$img_data = file_get_contents($file);
$base64 = $base64_encode($img_data);
$this->user->where('id', Auth::user()->id)->update(['profile_pic' => $base64 ]);
 

Другое предложение [лучший способ]: сохранить путь в базе данных и сохранить файл в хранилище или общедоступном и использовать URL-адрес для доступа к изображению

Однако, если вы все еще хотите сохранить его в базе данных

 $image = addslashes(file_get_contents(Input::file('image')));
$this->user->where('id', Auth::user()->id)->update(['profile_pic' => $image ]);