Ошибка: вызов функции-члена hashName () при значении null - PullRequest
1 голос
/ 09 июля 2020

Задача: загрузить изображение на сервер s3

Код работает правильно в моей локальной системе и файл правильно сохраняется на сервере s3, но когда я sh этот код на сервере, он дает мне ошибку hashName .

Error: Call to a member function hashName() on null in file /var/www/html/doctring-api/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 240

Код для Image Helper

<?php

namespace App\Helpers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Facades\Image;

class UserHelper
{
    public static function uploadImage($image)
    {
        try {
            if (count(explode("data:image/", $image)) > 1) {

                $fileName = \Carbon\Carbon::now()->timestamp . '_' . uniqid() . '.' . explode('/', explode(':', substr($image, 0, strpos($image, ';')))[1])[1];
                $image = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '',$image));
                Storage::disk('s3')->put($fileName, $image, 'public');

                return $fileName;
            }

            return true;
        } catch (\Exception $e) {
            return false;
        }
    }
}

Контроллер Api

 public function uploadPrescription(Request $request){
        $validator = Validator::make($request->all(), [
            'patient_id' => 'required',
            'appointment_id' => 'required',
            'prescription' => 'required'
        ]);

        if($validator->fails()){
            return $this->sendError('Validation Error.', $validator->errors());
        }

        $input = $request->all();

        $status_check = Appointment::where('id','=',$input['appointment_id'])->first();
        if($status_check->status == 'OnGoing'){

            //upload prescription(image in base64) to s3 bucket
            if($request->has('prescription'))
            {
                $imageName = UserHelper::uploadImage($request->prescription);

                $input['image_url'] = $imageName;
            }

            $data=[
                'patient_id' => $input['patient_id'],
                'appointment_id' => $input['appointment_id'],
                'prescription'=>  $imageName
            ];

            //Uploading Prescription only one record
//            $profile = Prescriptions::updateOrCreate(Arr::except($data, 'prescription'), $data);

            $profile = Prescriptions::updateOrCreate($data);
            return response()->json(['message' => "Prescription Uploaded", 'profile'=> $profile, 'error'=> 0, 'status'=> 1 ]);
        }else{
            return response()->json(['message' => "Prescription Uploading Failed", 'error'=> 1, 'status'=> 0 ]);
        }

    }

1 Ответ

1 голос
/ 09 июля 2020

В строке 240 из Filesystem/FilesystemAdapter, о которой сообщает ваша ошибка, есть эта строка:

return $this->putFileAs($path, $file, $file->hashName(), $options);

Это означает, что $ file имеет значение null, когда вы пытаетесь его загрузить. В своем вопросе вы говорите, что в локальной среде у вас нет этой проблемы, поэтому вам следует проверить код, который предшествует этому, что вызывает проблему в среде производственного сервера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...