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 artisan ясно компилиран
  2. Icacls public /grant Всички:F
  3. композитор dump-autoload

Някаква идея?


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 - е подпапката в public

$img_name - името на base64 низ

$data - е декодиращият обект

person Mohamed Raza    schedule 03.06.2021