Laravel 5.5 Хранение изображения из строки base64

В проекте Laravel 5.5 я успешно сохранил информацию в таблице продуктов в MySQL. Информация включает строку base64, которая в основном является изображением. Однако я столкнулся с проблемой при создании изображения в общей папке проекта laravel. Ниже мой код для ProductController.php

public function update(Request $request, $id)
{
    $data = $request->validate([
        'product_name' => 'required',
        'description' => 'required',
        'rating' => 'required'
    ]);

    $uploaded_image = $request->input('uploaded_image');
    $data['uploaded_image'] = $uploaded_image['value']; // base64 string
    $product = Product::findOrFail($id);
    $product->update($data);
    // the data stored into the database with no issue

    $image_base64 = base64_decode($uploaded_image['value']);
    $path = public_path();
    $success = file_put_contents($path, $image_base64.".png");

    return response()->json($data);
}

Я вижу следующую ошибку ниже:

message:"file_put_contents(C:\xampp\htdocs\laravel-api\public): failed to open stream: Permission denied"

Просмотрев разные источники, я сделал следующее, но ничего не изменилось.

  1. php ремесленник ясно скомпилирован
  2. Icacls public /grant
  3. композитор дамп-автозагрузка

Есть идеи?


person Niladri Banerjee - Uttarpara    schedule 05.04.2018    source источник
comment
Комментарии не для расширенного обсуждения; этот разговор был перемещен в чат.   -  person Rob    schedule 05.04.2018


Ответы (2)


В соответствии с нашим обсуждением вам необходимо предоставить такие разрешения, как:

icacls "public" /grant USER:(OI)(CI)F /T

Где USER — пользователь вашего компьютера

Кроме того, если вы хотите сохранить изображение base64 в пути хранения, используйте следующий код:

//Function to save a base64 image in laravel 5.4
public function createImageFromBase64(Request $request){

      $file_data = $request->input('uploaded_image');
      //generating unique file name;
      $file_name = 'image_'.time().'.png';
      //@list($type, $file_data) = explode(';', $file_data);
      //@list(, $file_data)      = explode(',', $file_data);
      if($file_data!=""){
        // storing image in storage/app/public Folder
        \Storage::disk('public')->put($file_name,base64_decode($file_data));     
      }
}

Надеюсь, это поможет вам!

person Hiren Gohel    schedule 05.04.2018

Вместо того, чтобы давать разрешение как icacls "public" /grant USER:(OI)(CI)F /T, мы можем хранить файлы/изображения следующим образом.

Storage::disk('public')->put('Items_attachments/'.$img_name, base64_decode($data));

Items_attachments - это подпапка внутри общедоступной

$img_name - имя для строки base64

$data - объект декодирования

person Mohamed Raza    schedule 03.06.2021