@BloodVIRUS

Как загрузить файл на сервер с помощью REST api?

Здравствуйте уважаемое сообщество. Раз за разом веду не равную войну с загрузкой файла, и каждый раз ее проигрываю, заменяя вроде бы красивые функции yii2 на старый добрый нативный php.
Суть в чем. Когда мы используем все нативное от yii, в котором и модели, и контроллеры, и вьюшки от самого движка, загрузка файла достаточно простая. Создаем в activeForm field с типом file, и на стороне контроллера вполне спокойно работаем с целой моделью, в которой и файлы, и текстовые данные.

Когда дело доходит до REST, в котором у нас не существует всей видимой части yii2, начинается что-то мне совершенно не понятное.

Задача простая. Предположим создаем новость, в которой есть картинка как постер.

Создаем модель, в которой не забываем указать public $imageFile;
Создаем в модельке правила. вида тайтл только текст, 60 символов, описание текст 1000 символов, туда же добавим правило файла: [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],

Казалось бы все. Идем в контроллер, создаем public function actionCreate()
В нем $file = new LogoFile();
следом все как в мане
if (Yii::$app->request->isPost) {
$model->imageFile = UploadedFile::getInstance($model, 'imageFile');

ловим ошибку. imageFile пустой.
Проверяем $_FILES - пришел, есть.
Проверяем UploadedFile::getInstance($model, 'imageFile'); - нет файла.
Заглядываю по имени: UploadedFile::getInstancesByName("imageFile") - файл есть.

Очередной раз пытаюсь сломать гугл вопросами, найти ничего подобного не могу...

Подскажите пожалуйста как все-таки правильно в yii2 загрузить сопутствующий файл.
По логике то все вроде понятно. Берем файл, сохраняем его на диске, после сохранения берем путь до файла, и пишем в текстовое поле в БД. Но уже на этапе просто сохранить файл все рушится..
ps запрос я описал в сваггере, и через него тестировал
  • Вопрос задан
  • 533 просмотра
Пригласить эксперта
Ответы на вопрос 2
thewind
@thewind
php программист, front / backend developer
Судя по вашему коду, там где файл пустой, вы берете его из модели. А в ней же нет его?! Вы же его только пытаетесь загрузить.
Ответ написан
tomclancys
@tomclancys
У вас тема как загрузить файл через API... Файл то вы как в итоге сохранить пытаетесь через форму на странице выбрав файл на пк или файл приходит через API в виде ссылки на него?

В документации всё подробно расписано - https://www.yiiframework.com/doc/guide/2.0/ru/inpu...

Создаёте в контроллере экшен Create и в модели метод upload() который отвечает за валидацию и сохранение файла на сервере.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы