Сохранить аватар в базе данных octobercms после того, как я его изменил

после изменения размера аватара пользователя с изображением вмешательства я пытаюсь сохранить его в базе данных octobercms следующим образом:

        if (Input::hasFile('avatar')) {


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

  $filenamewithextension =   $file->getClientOriginalName();


   //get filename without extension
           $filename = pathinfo($filenamewithextension, PATHINFO_FILENAME);


  //get file extension
      $extension = $file->getClientOriginalExtension();


   //filename to store
           $filenametostore = $filename.'_'.time().'.'.$extension;





            Storage::put('public/profile_images/'. $filenametostore, fopen($file, 'r+'));
            Storage::put('public/profile_images/thumbnail/'. $filenametostore, fopen($file, 'r+'));



    //Resize image here
           $thumbnailpath ='storage/app/public/profile_images/thumbnail/'.$filenametostore;


             $img = Image::make($file->getRealPath());
             $img->crop(request('w'), request('h'), request('x1'), request('y1'));


      $img->save($thumbnailpath);

        $user->avatar=  $filenametostore;


        }

я получаю эту ошибку:

The avatar must be an image.
C:\wamp643\www\october3\vendor\october\rain\src\Database\Traits\Validation.php line 340

я действительно не знаю, что делать, я новичок.

пожалуйста, помогите мне!!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
207
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы просто устанавливаете имя файла, вы должны указать полный путь к изображению.

Assuming you have already avatar attachment relation in user model

public $attachOne = [
    'avatar' => ['System\Models\File']
];

replace

$user->avatar = $filenametostore;

with

$user->avatar = storage_path($thumbnailpath);

может быть, это должно сработать.

если сомневаетесь, прокомментируйте.

спасибо большое, но проблема та же Ничего не изменилось

Fati Alami 25.10.2018 12:05

Можете ли вы поделиться информацией о dd($user->avatar); после назначения, и где вы пишете этот код.

Hardik Satasiya 25.10.2018 12:08

это результат dd ($ user-> avatar): images (3)_1540464305.jpg. и для части кода: ** RainLab \ User \ Components \ account.php **

Fati Alami 25.10.2018 12:48
$user->avatar=$thumbnailpath; dd($user->avatar); отображает это: "storage/app/public/profile_images/thumbnail/images (2)_1540466712.jpg"
Fati Alami 25.10.2018 13:25

хорошо, может быть, вы забыли добавить storage_path(), в ответ на его $user->avatar = storage_path($thumbnailpath);, чтобы ваш путь был от root, может быть, я обновил его, вы использовали его до того, как я обновил, я думаю

Hardik Satasiya 25.10.2018 13:32

Я что-то тестирую: `$ user-> avatar = Input :: file ('avatar'); dd ($ user-> avatar); and i get this : UploadedFile {# 596 ▼ -test: false -originalName: "images (3) .jpg" -mimeType: "image / jpeg" -size: 9300} `

Fati Alami 25.10.2018 13:34

да, это нормально, но это изображение не будет обрезано, я думаю, вы можете попробовать этот $user->avatar = storage_path($thumbnailpath); => $user->avatar нужен полный путь ИЛИ экземпляр file

Hardik Satasiya 25.10.2018 13:35

я думаю, что $ user-> avatar принимает только такой объект, как я показал вам Input :: file ('avatar'), поэтому мне нужен способ конвертировать изображение в файл, например объект file_; У меня есть тестовый путь к хранилищу, но все та же проблема

Fati Alami 25.10.2018 13:38

проверьте это: octobercms.com/docs/database/attachments#creating-attachment‌ s из официального документа, просто попробуйте, если он не работает, мы можем использовать что-то еще

Hardik Satasiya 25.10.2018 13:39

если я напишу это: $thumbnailpath ='C:wamp643/www/october3/storage/app/public/profile_images/t‌​humbnail/'.$filename‌​tostore, я получаю ту же ошибку, что и первый: Аватар должен быть изображением

Fati Alami 25.10.2018 14:00

Я думаю, мне нужен способ преобразовать результат на файл-экземпляр, как вы сказали

Fati Alami 25.10.2018 14:08

ваш путь неверен: '' C: wamp643 / www '<= вам нужно добавить 'C:/wamp643/www - или лучше использовать storage_path, поскольку он нормализует путь с помощью propr directory separator

Hardik Satasiya 25.10.2018 15:45

Я сделал то же, что и ты, но ничего не происходит, такая же проблема

Fati Alami 25.10.2018 15:57

чтобы преобразовать файл-instace, вы можете использовать fromFile($filePath), но снова потребуется путь, такой же, как здесь $file = new System\Models\File; $file->fromFile('/path/to/avatar.jpg');, поэтому я предполагаю, что что-то отсутствует, я проверю свой локальный, воспроизведя это

Hardik Satasiya 25.10.2018 16:22

вы используете этот образ lib http://image.intervention.io/api/make в crop, верно?

Hardik Satasiya 25.10.2018 16:23

посмотри, что я сделал: $file = new System\Models\File; $file->fromFile($thumbnailpath); $user->avatar=$file, но я получаю это: Класс RainLab \ User \ Components \ System \ Models \ File не найден

Fati Alami 25.10.2018 16:33

Привет ты все еще там

Fati Alami 26.10.2018 13:18

хорошие новости, сэр, я решил это: $ file = new \ System \ Models \ File, как вы сказали вчера, я просто добавляю \

Fati Alami 26.10.2018 17:23

так что большое спасибо за вашу помощь, это было очень интересно

Fati Alami 26.10.2018 17:25

Другие вопросы по теме