Не удалось сохранить изображение базы 64 в Laravel 8

#laravel #laravel-8

Вопрос:

Я пытаюсь сохранить изображение base64, полученное из сообщения ajax (блейд-файл). Ниже приведен код, который я использую для сохранения данных, но он выдает ошибку 500.

 public function add_ref_images_first(Request $request){
        $fileName = "";
        $end_url = "";
        $count = 0;
        $folder_name = 'PUBP' . time();
        foreach ($request->images as $data){
            $image_64 = $data['src']; //your base64 encoded data
            $extension = explode('/', explode(':', substr($image_64, 0, strpos($image_64, ';')))[1])[1];   // .jpg .png .pdf
            $replace = substr($image_64, 0, strpos($image_64, ',') 1);
//
//            // find substring fro replace here eg: data:image/png;base64,
//
            $image = str_replace($replace, '', $image_64);
            $image = str_replace(' ', ' ', $image);
            $ref_image_id = 'PUBR'.time().$count  .'.'.$extension;
            $fileName = base64_decode($image)->storeAs($folder_name, $ref_image_id , ['disk' => 'my_uploaded_files']);
            if($imageName){
                $end_url = $end_url.$imageName.',';
            }
        }
        return response()->json(['url' => $end_url, 'id' => '1']);
    } 

Есть ли проблемы с кодом?

Комментарии:

1. проверьте каталог_проекта/хранилище/журналы/laravel.log

2. Я получаю этот ошибочный вызов функции-члена storeAs() в строке, Bcoz Я отправляю base64 для хранения

Ответ №1:

вместо строки

   $fileName = base64_decode($image)->storeAs($folder_name, $ref_image_id , ['disk' 
=> 'my_uploaded_files']);
 

вы можете сделать :

 use IlluminateSupportFacadesStorage;
Storage::put($ref_image_id, base64_decode($image), 'local');
 

поскольку в основном вы пытались использовать storeAs для строкового значения, storeAs работает с $request->file(‘nameFromForm’)

ссылка: https://laravel.com/docs/8.x/filesystem

https://laravel.com/docs/8.x/filesystem#specifying-a-file-name