kato\DropZone не скачивает файл. И не так себя ведёт, как пишут в примерах[РЕШЕНО]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
terrarium volition
Сообщения: 99
Зарегистрирован: 2021.07.15, 21:22

kato\DropZone не скачивает файл. И не так себя ведёт, как пишут в примерах[РЕШЕНО]

Сообщение terrarium volition »

Всем доброго дня!

Пытаюсь работать с kato\DropZone, ситуация следующая:
Имя файла он видит, а сам файл не передаёт

View:

Код: Выделить всё

echo DropZone::widget([ 
        'options' => [
            'url'           => \Yii::$app->getUrlManager()->createUrl(['site/control']),
            'maxFilesize'   => '2',
        ],
        'clientEvents' => [
            'sending' => "function(file, xhr, formData) {
                            formData.append('_csrf-frontend', '{$csrfToken}'); 
                        }",
            'complete' => "function(file){
                                if(file){
                                    new PNotify({
                                        title   : file.name,
                                        type    : 'success',
                                        text    : 'Файл загружен',
                                        styling : 'bootstrap3',
                                        delay   :  2000
                                    });
                                }else{
                                    new PNotify({
                                        title   : file.name,
                                        type    : 'warning',
                                        text    : 'Файл не загружен',
                                        styling : 'bootstrap3',
                                        delay   :  3000
                                    });
                                }
                            }"
        ]]);
Controller:

Код: Выделить всё

if ((Yii::$app->request->isPost)&&(Yii::$app->request->isAjax)) {
            $fileName = [b]$_FILES['file']['name'];[/b]
            $file   = \yii\web\UploadedFile::getInstanceByName($fileName);

            $session->set('filename', $fileName);
            $session->set('file', $file);
            }
        }
Первая непонятка:
В примерах пишут так:

Код: Выделить всё

if (isset([b]$_FILES[$fileName][/b])) {
        $file = \yii\web\UploadedFile::getInstanceByName($fileName);
...
Но у меня отправка идёт в таком формате:

Код: Выделить всё

file	[
    'name' => 'fileName.xml'
    'type' => 'text/xml'
    'tmp_name' => 'C:\\xampp\\tmp\\phpFE15.tmp'
    'error' => 0
    'size' => 228
]
Поэтому в пути обращения к имени есть ещё и 'file'. Иначе вообще не отлавливается наличие передачи файла.
В итоге, при попытке получить файл:

Код: Выделить всё

$file   = \yii\web\UploadedFile::getInstanceByName($fileName);
Он null!

Что я делаю не так? Казалось бы примитивное использование виджета, и никаких сюрпризов быть не должно!

Подскажите, пожалуйста, куда копать? :?

UPD: в \yii\web\UploadedFile::getInstanceByName() надо передавать не имя файла, а имя атрибута.
Последний раз редактировалось terrarium volition 2023.04.15, 14:00, всего редактировалось 1 раз.
terrarium volition
Сообщения: 99
Зарегистрирован: 2021.07.15, 21:22

Re: kato\DropZone не скачивает файл. И не так себя ведёт, как пишут в примерах

Сообщение terrarium volition »

Создал новый проект, в котором по умолчанию boostrap5 - в нём DropZone вообще не работает!
Поставил и bootstrap4 - ситуация аналогичная.

Помогите, пожалуйста, найти рабочий DropZone, как виджет yii2 на bootstrap5 или 4! :(
Ответить