ITwoolf
@ITwoolf

Как исправить ошибку загрузки файла?

Добрый день! Наконец-то смог удачно настроить кнопку импорта в своей табличке. Решил испробовать его в деле. Сделал экспорт таблички в csv формате. Потом решил его же импортировать. Нажимаю на кнопку импорта, дальше выбираю тот-же файл и нажимаю "Submit"
В итоге выскакивает ошибка fopen(D:\Server\OSPanel\domains\site2\frontend\runtime/1/grid-export.csv): failed to open stream: No such file or directory (фопен(D:\Server\OS Cpanel\domains\site2\frontend\runtime/1/grid-экспорт.КШМ): не удалось открыть поток: нет такого файла или каталога).

Прошелся по своему коду и не понял в чем косяк.

Контроллер:

public function actionImporter($fName)
    {
        //путь к файлу
        $pathToFile = Yii::getAlias('@way7') . '/'.$fName;
        //файл можно загрузить с помощью формы

        if (!file_exists($pathToFile) || !is_readable($pathToFile)) {
            //... код, если файл отсутствует
        }
        $data = array();

        if (($handle = fopen($pathToFile, 'r')) !== false) {
            $i = 0;

            while (($row = fgetcsv($handle, 1000, ',')) !== false) {
                $model = new Kniga1();
                $model->name = $row [0];
                $model->creation_date = $row [1];
                $model->id_avtor1 = $row [2];

                if ($model->validate()) {
                    $model->save();
                } else {
                    //... код в случае ошибки сохранения
                }
            }
            fclose($handle);
        };
        //... код после импорта
    }
    public function actionUpload()
    {
        Yii::setAlias('@way7', '@runtime/1');
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->way7 = UploadedFile::getInstance($model, 'way7');
            if ($model->upload()) {
                // file is uploaded successfully
                $this->actionImporter($model->fName);
                VarDumper::dump($model);
                return;
            }
        }
        return $this->render('upload', ['model' => $model]);
    }


Модель:
public $fName;
    /**
     * @var UploadedFile
     */
    public $way7;

    public function rules()
    {
        return [
            [['way7'], 'file', 'skipOnEmpty' => false],
        ];
    }

    public function upload()
    {
        if ($this->validate()) {
            $this->fName = $this->way7->baseName . '.' . $this->way7->extension;
            $this->way7->saveAs(\Yii::getAlias('way7') . $this->fName);
            return true;
        } else {
            return false;
        }
    }


Вюшка:
<?php use yii\widgets\ActiveForm;

$form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->field($model, 'way7')->fileInput() ?>

    <button>Submit</button>

<?php ActiveForm::end() ?>
  • Вопрос задан
  • 244 просмотра
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
No such file or directory

что тут не понятного? Нет такого файла или директории. Решение - создать такой файл или директорию. Программно или вручную. Не понимаю в чем проблема. У Вас есть однозначная ошибка и путь к файлу, который выдает это ошибку. Что еще Вам надо?
Ответ написан
@xRange
Из-за разных слэшей? Думаю стоит использовать предопределенную константу DIRECTORY_SEPARATOR

$pathToFile = Yii::getAlias('@way7') . DIRECTORY_SEPARATOR . $fName;

Yii::setAlias('@way7', '@runtime' . DIRECTORY_SEPARATOR . '1');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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