Laravel-excel: [ОШИБКА] "Файл не найден по пути" при импорте файла на сервер, в то время как file_exists ($ path) возвращает истину

Созданный на 11 окт. 2018  ·  21Комментарии  ·  Источник: Maatwebsite/Laravel-Excel

Предпосылки

  • [x] Возможность воспроизвести поведение за пределами вашего кода, проблема изолирована в Laravel Excel.
  • [X] Проверено, что ваша проблема еще не отправлена.
  • [X] Проверено, не был ли отправлен PR, который решает эту проблему.

Версии

  • Версия PHP: 7.1.16
  • Версия Laravel: 5.7
  • Версия пакета: 3.1.1

Описание

Когда я пытаюсь следовать документации по импорту файла, хранящегося на сервере, я получаю Illuminate\Contracts\Filesystem\FileNotFoundException говорящее File not found at path: [path to file] . Однако file_exists($path); возвращает true.

Действия по воспроизведению

  1. Установите свежую версию Laravel.
  2. Установите Laravel Excel.
  3. Поместите ваш xlsx-файл в папку проекта, например в папку storage / app.
  4. Запустите php artisan make:import UsersImport --model=User .
  5. Добавьте следующий код в маршрут, команду или куда-нибудь, где вы можете ее запустить:
use Maatwebsite\Excel\Facades\Excel;
use App\Imports\UsersImport;

Excel::import(new UsersImport, storage_path('app/test.xlsx'));
  1. Запустите код.

Ожидаемое поведение:
Согласно документам, строки в файле должны быть импортированы в таблицу пользователей.

Фактическое поведение:
Illuminate\Contracts\Filesystem\FileNotFoundException: File not found at path: [path]

Самый полезный комментарий

Это не ошибка. Поместите файл Excel в папку «хранилище / приложение». он использует конфигурацию диска по умолчанию в config / filesystems.php

Проверьте эту часть документации

Все 21 Комментарий

@ mattias-persson
Попробуйте вместо этого:
Excel::import(new UsersImport, 'test.xlsx');

См. Импорт с диска по

Ах, моя беда. Я пропустил эту часть документации. Спасибо!

у меня такая же проблема, :(

контроллер:

пространство имен App \ Http \ Controllers \ Admin;

используйте App \ Model \ Mahasiswa;
используйте App \ Model \ UsersImport;
используйте Maatwebsite \ Excel \ Facades \ Excel;
используйте App \ Http \ Controllers \ Controller;
используйте App \ Http \ Requests;

класс UserimController расширяет контроллер
{
публичная функция import ()
{
Excel :: import (новый UsersImport, 'Mahasiswa.xlsx');

      return back()->with('success', "Import data succesfull");
    }
  }

и Мой класс или модель:

пространство имен App \ Model;

используйте App \ Mahasiswa;
используйте Maatwebsite \ Excel \ ConcernsToModel;
класс UsersImport реализует ToModel
{
/ **

  • @param массив $ row
    *
  • @return Mahasiswa | нет
    * /
public function model(array $row)
{
    return new Mahasiswa([
          'npm'     => $row[0],
          'nama_mahasiswa'    => $row[1],
          'jenis_kelamin'    => $row[2],
          'tanggal_lahir'    => $row[3],
        ]);
    }
}

и ошибка:
Лига \ Flysystem \ FileNotFoundException
Файл не найден по пути: Mahasiswa.xlsx

и:
публичная функция assertPresent ($ path)
{
if ($ this-> config-> get ('disable_asserts', false) === false &&! $ this-> has ($ path)) {
выбросить новое исключение FileNotFoundException ($ path);
}
}

что не так с моей работой :(

Хм
контролер
`

пространство имен App \ Http \ Controllers \ Admin;

используйте App \ Model \ Mahasiswa;
используйте App \ Model \ UsersImport;
используйте Maatwebsite \ Excel \ Facades \ Excel;
используйте App \ Http \ Controllers \ Controller;
используйте App \ Http \ Requests;

класс UserimController расширяет контроллер
{
публичная функция import ()
{
Excel :: import (новый UsersImport, 'Mahasiswa.xlsx');

      return back()->with('success', "Import data succesfull");
    }
  }

`

класс или модель:
`

пространство имен App \ Model;

используйте App \ Mahasiswa;
используйте Maatwebsite \ Excel \ ConcernsToModel;
класс UsersImport реализует ToModel
{
/ **

  • @param массив $ row
    *
  • @return Mahasiswa | нет
    * /
public function model(array $row)
{
    return new Mahasiswa([
          'npm'     => $row[0],
          'nama_mahasiswa'    => $row[1],
          'jenis_kelamin'    => $row[2],
          'tanggal_lahir'    => $row[3],
        ]);
    }
}

`

и эта ошибка

Лига \ Flysystem \ FileNotFoundException
Файл не найден по пути: Mahasiswa.xlsx

и моя база данных

image

@GlennM, пожалуйста, помогите мне :(

image

@GlennM, пожалуйста, помогите мне :(

@ Emha2403 Проверьте, где находится ваш файл. Похоже, файл, который вы пытаетесь импортировать, находится не в нужном месте.

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

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

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

@ williams-young Не могли бы вы открыть новый выпуск (согласно шаблону выпуска), указав всю необходимую информацию? Спасибо!

Это не ошибка. Поместите файл Excel в папку «хранилище / приложение». он использует конфигурацию диска по умолчанию в config / filesystems.php

Проверьте эту часть документации

xxxxxxxxxxxxxxxxxxx \ хранилище \ приложение
файл Excel должен идти по следующему пути.

xxxxxxxxxxxxxxxxxxx \ хранилище \ приложение
el archivo excel debe ir en la siguiente ruta.

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

Я понимаю, что такое поведение задокументировано, но опять же оно кажется странным и неинтуитивным. Если вы передадите ему абсолютный путь к файлу, который возвращается как истинный из file_exists () .... он должен загрузиться. Кажется, с этим пакетом связано много ненужных ошибок, даже при попытке выполнить очень простые операции импорта.

У меня есть 4 столбца XLSX со 100 строками, которые я хочу импортировать в коллекцию. Мне приходилось посещать форумы из-за проблем с filePath, дат, возвращаемых как целые числа, и попытки выяснить, в чем смысл этих сгенерированных классов XYZImport, когда я пытаюсь импортировать небольшой xlsx в коллекцию.

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

Я согласен с этим. Похоже, это вызывает недоумение у многих пользователей.

Я согласен с тем, что это сбивает с толку.

Разве в документации не упоминается путь по умолчанию storage/app ? Я знаю, что это настраивается, и почти уверен, что это облегчит пользователям с меньшими знаниями laravel.

Я согласен с тем, что это сбивает с толку.

Разве в документации не упоминается путь по умолчанию storage/app ? Я знаю, что это настраивается, и почти уверен, что это облегчит пользователям с меньшими знаниями laravel.

Если вы считаете, что в документации отсутствует какая-либо информация, вы всегда можете отправить запрос на перенос в документацию. Вы можете сделать это, используя ссылку Help us improve this page! расположенную внизу каждой страницы.

посчитайте меня в замешательстве .. пытался передать абсолютный путь с помощью base_path (), так как мои файлы хранятся вне папки хранилища и в специальной папке "модулей" .. не удалось заставить его работать, наконец-то пришлось переместить мои файлы в путь к хранилищу. Если полученный путь начинается с косой черты, он должен просто предполагать, что это абсолютный путь IMO

Да, вообще-то кажется, что даже после добавления файлов в хранилище он не может их найти. Судя по ответу об ошибке, в конце он пытается указать относительный путь: man_facepalming:.

В течение нескольких месяцев было задокументировано, что использование абсолютных путей возможно: https://docs.laravel-excel.com/3.1/imports/basics.html#importing -full-path

Я заблокирую этот билет, чтобы упростить процесс поддержки. Если возникают новые ошибки или вопросы, пожалуйста, создайте новую проблему с объяснением вашего конкретного случая.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги