Laravel-excel: [PREGUNTA] El trabajo de lectura de fragmentos en cola falla

Creado en 17 oct. 2018  ·  21Comentarios  ·  Fuente: Maatwebsite/Laravel-Excel

POR FAVOR LEA: ¡ES NECESARIO LLENAR LA PLANTILLA! Es posible que no se detecten los problemas que no incluyan suficiente información. ¿Ha leído las pautas de contribución de Laravel-Excel (https://laravel-excel.maatwebsite.nl/docs/3.1/getting-started/contributing) y el Código de conducta (https://github.com/Maatwebsite/Laravel-Excel/? blob / 3.1 / CODE_OF_CONDUCT.md)? Al presentar un problema, se espera que lo cumpla, lo que incluye tratar a todos con respeto. Por favor, anteponga a su problema uno de los siguientes: [ERROR] [PROPUESTA] [PREGUNTA].

Prerrequisitos

Ponga una X entre los corchetes si ha hecho lo siguiente:
  • [] Capaz de reproducir el comportamiento fuera de su código, el problema está aislado en Laravel Excel.
  • [x] Verificó que su problema aún no se haya presentado.
  • [x] Se verificó si no se envió ningún RP que solucione este problema.

Versiones

Sea lo más exacto y completo posible al probar los números de versión
  • Versión de PHP: 7.1.23
  • Versión de Laravel: 5.6
  • Versión del paquete: 3.1.2

Descripción

Cuando intento importar un archivo (no importa si es .xlsx, .ods o .csv) y pongo en cola la lectura del fragmento, el trabajo falla con este error en mi tabla failed_jobs:
InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Pasos para reproducir

¿Cómo se puede reproducir este tema? Proporcione un archivo de Excel o un repositorio de reproducción para ayudarnos a reproducir el problema fácilmente.

Comportamiento esperado:

Esperaba que el trabajo se hiciera sin fallas. Si no pongo el trabajo en cola, funciona sin problemas.

Comportamiento real:
El seguimiento de la pila en la tabla fail_jobs:

InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137
Stack trace:
#0 /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php(389): PhpOffice\PhpSpreadsheet\Shared\File::assertFile('/tmp/SWQF2KfyI6...')
#1 /home/miguel/www/html/proliste/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php(82): PhpOffice\PhpSpreadsheet\Reader\Xlsx->load('/tmp/SWQF2KfyI6...')
#2 [internal function]: Maatwebsite\Excel\Jobs\ReadChunk->handle()
#3 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#4 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#5 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#6 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#7 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
#8 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Maatwebsite\Excel\Jobs\ReadChunk))
#9 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Maatwebsite\Excel\Jobs\ReadChunk))
#10 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#11 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Maatwebsite\Excel\Jobs\ReadChunk), false)
#12 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(83): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)
#13 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(326): Illuminate\Queue\Jobs\Job->fire()
#14 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(276): Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), Object(Illuminate\Queue\WorkerOptions))
#15 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(118): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\DatabaseJob), 'database', Object(Illuminate\Queue\WorkerOptions))
#16 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\Queue\Worker->daemon('database', 'default', Object(Illuminate\Queue\WorkerOptions))
#17 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\Queue\Console\WorkCommand->runWorker('database', 'default')
#18 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
#19 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#20 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#21 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#22 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Container/Container.php(564): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#23 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Command.php(179): Illuminate\Container\Container->call(Array)
#24 /home/miguel/www/html/proliste/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#25 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Command.php(166): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#26 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(886): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(262): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#28 /home/miguel/www/html/proliste/vendor/symfony/console/Application.php(145): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Console/Application.php(89): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /home/miguel/www/html/proliste/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /home/miguel/www/html/proliste/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 {main}

información adicional

Desde el seguimiento de la pila, el error parece provenir de PhpSpreadsheet , pensé que era un problema de derechos de lectura / escritura, pero mi carpeta /tmp es 777 y mi archivo php.ini no ha cambiado desde la instalación (excepto upload_max_filesize post_max_size).

Mis contactos Clase de importación:

<?php

namespace App\Imports;

use App\Contact;
use App\Rubric;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\Importable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class ContactsImport implements ToModel, WithBatchInserts, WithChunkReading, WithHeadingRow, ShouldQueue
{
    use Importable;

    /**
    * <strong i="10">@param</strong> array $row
    *
    * <strong i="11">@return</strong> \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        if (isset($row['rubrique'])) {
            $rubric = Rubric::firstOrCreate(['name' => $row['rubrique']]);
        } else {
            $rubric = Rubric::where('name', 'AUTRE')->first();
        }

        $area_id = intval(substr($row['code_postal'], 0, 2)) !== 0 ? intval(substr($row['code_postal'], 0, 2)) : 1;

        return new Contact([
            'name' => $row['nom'],
            'address' => $row['adresse'],
            'postal_code' => $row['code_postal'],
            'city' => $row['ville'],
            'phone_number' => $row['telephone'],
            'fax_number' => $row['fax'],
            'email' => $row['email'],
            'rubric_id' => $rubric->id,
            'area_id' => $area_id
        ]);
    }

    public function batchSize(): int
    {
        return 1000;
    }

    public function chunkSize(): int
    {
        return 1000;
    }
}
cannot-reproduce

Comentario más útil

Intente cambiar temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) por ejemplo, su carpeta de almacenamiento. Podría solucionar el problema por ti.

Todos 21 comentarios

Hola @MLouis ,

¿Podrías comprobar el código de tu controlador?
Estás usando el rasgo Importable, por lo que en tu controlador debes usar
(new ContactsImport)->queue('file.ext');

Consulte Importables

Si el problema aún no se resuelve después de esto, publique también el código de su controlador.

Hola @GlennM , ¡gracias por tu respuesta!

En mi controlador probé ambos:

Excel::import(new ContactsImport, $request->file('liste'));
// and
(new ContactsImport)->queue($request->file('liste'));

También intenté almacenar primero el archivo enviado por el usuario antes de pasarlo a ContactsImport:

$fileName = Str::uuid() . '.' . $request->file('liste')->getClientOriginalExtension();
$request->file('liste')->storeAs('listes', $fileName);
Excel::import(new ContactsImport, 'listes/' . $fileName);
// also tried with
(new ContactsImport)->queue('listes/' . $fileName);

Pero sigo recibiendo el mismo error InvalidArgumentException: File "/tmp/whatever" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Mi ListController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\ContactsImport;
use App\Exports\ContactsExport;
use App\Contact;
use App\Rubric;
use App\Area;
use App\Cart;
use Excel;
use DB;
use App\Http\Requests\ListRequest;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;

class ListController extends Controller
{
    public function import(Request $request)
    {
        $request->validate([
            'liste' => 'required'
        ]);

        $fileName = Str::uuid() . '.' . $request->file('liste')->getClientOriginalExtension();
        $request->file('liste')->storeAs('listes', $fileName);

        (new ContactsImport)->queue('listes/' . $fileName);

        return back()->with('status', 'Liste ajoutée avec succès');
    }
}

Desafortunadamente, no puedo reproducirlo.

El siguiente código debería funcionar en el controlador:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

public function import(Request $request)
{
    (new ContactsImport)->queue($request->file('liste'));

    return back()->with('status', 'Liste ajoutée avec succès');
}

Para su información, estoy usando una versión simplificada, este es el método en mi controlador:

public function process(Request $request)
{
    (new UsersImport)->queue($request->file('dataset'));

    return back()->with('success', 'All good!');
}

Y mi clase UsersImport:

<?php

namespace App\Imports;

use App\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithBatchInserts;
use Maatwebsite\Excel\Concerns\WithChunkReading;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UsersImport implements ToModel, WithHeadingRow, WithBatchInserts, WithChunkReading, ShouldQueue
{
    use Importable;

    /**
    * <strong i="13">@param</strong> array $row
    *
    * <strong i="14">@return</strong> \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name' => $row['name'],
            'email' => $row['email'],
            'password' => $row['id'],
        ]);
    }

    /**
     * <strong i="15">@return</strong> int
     */
    public function batchSize(): int
    {
        return 1000;
    }

    /**
     * <strong i="16">@return</strong> int
     */
    public function chunkSize(): int
    {
        return 1000;
    }
}

Intenté agregar / eliminar WithHeadingRow , WithBatchInserts , WithChunkReading , Importable , usando ToCollection lugar de ToModel sin éxito . Solo funciona cuando no pongo el trabajo en cola.

Y no tengo ningún problema para exportar una lista con un trabajo en cola, solo fallan las importaciones.

¿Quizás el problema proviene de una mala configuración de mi servidor de desarrollo?

¿Quizás el problema proviene de una mala configuración de mi servidor de desarrollo?

Ese podría ser el caso de hecho.
Probé en PHP 7.1 / Laravel 5.6 y PHP 7.2 / Laravel 5.7 y pude importar el archivo en ambos casos, usando T oModel , WithHeadingRow , WithBatchInserts , WithChunkReading y ShouldQueue y Importable

Si utiliza el software comercialmente y necesita un soporte detallado o lo necesita con urgencia, podemos ofrecerlo de forma comercial. En ese caso, consulte nuestra página de Soporte .

Podría tener una ventaja: después de intentar una exportación en cola de más de 150K filas, el trabajo falló y me dio el mismo error, pero no instantáneamente como con la importación, después de 20 AppendQueryToSheet trabajos.
Por lo tanto, podría ser un problema con mi carpeta /tmp , como un límite de tamaño. Estoy en Debian 9, pero solo tengo 3 particiones: / (que contiene /tmp ), /home y swap , este no es un tamaño de partición límite.

¡Te daré actualizaciones si encuentro algo! :rezar:

__Editar__
¿Debo cambiar el nombre de este problema como [PREGUNTA] en lugar de [ERROR]?

Intente cambiar temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) por ejemplo, su carpeta de almacenamiento. Podría solucionar el problema por ti.

Gracias @patrickbrouwers , solucionó mi problema, ¡puedo importar y exportar archivos grandes sin ningún error!

@patrickbrouwers no hay temp_path en config excel. ¿puedes elaborar?

@sharjeelz, si tiene el archivo de configuración de la última versión, consulte: https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L167 Actualmente hay un respaldo en temp_path para las personas que usan el antiguo config.

Hola chicos, sé que este es un tema obsoleto. Pero parece que tengo un problema muy similar. Tanto mi compañero de trabajo como yo estamos ejecutando el mismo código base, donde obtengo el "Archivo X no existe" y él no. Suponemos que es un problema de configuración. Pero incluso cuando cambio config / local_path, sigo sin poder superar el problema.

Realmente solo estoy buscando problemas conocidos que puedan estar causando esto. Ambos estamos ejecutando nuestros proyectos de Laravel localmente en macbooks y estamos usando la versión de lib 3.1.17

El nombre de archivo C: UsersAshimAppDataLocalTemplaravel-excel-K6OeXpSQuAARlI0UrSeOAkFZ0kELq0Ax.xls no se reconoce como un archivo OLE

Como puedo resolver esto

Hola, tengo este mismo problema, pero mi pregunta es: ¿por qué muestra un nombre de archivo diferente al que envié en la función de importación? ¿Crea un archivo temporal desde el que lee la información?

`` ``
[2020-04-17 15:15:26] local.ERROR: El archivo "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" no existe. {"exception": "[object] (InvalidArgumentException (código: 0): File" /tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx "no existe en / var / www / html / sites / dashboard-imprensa / vendor phpoffice / phpspreadsheet / src / PhpSpreadsheet / Shared / File.php: 137)
[stacktrace]

0 /var/www/html/sites/dashboard-imprensa/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php(327): PhpOffice \ PhpSpreadsheet \ Shared \ File :: assertFile ('/ tmp / laravel- ex...')

1 /var/www/html/sites/dashboard-imprensa/vendor/maatwebsite/excel/src/Jobs/ReadChunk.php(118): PhpOffice \ PhpSpreadsheet \ Reader \ Xlsx-> load ('/ tmp / laravel-ex. .. ')

2 [función interna]: Maatwebsite \ Excel \ Jobs \ ReadChunk-> handle (Object (Maatwebsite \ Excel \ Transactions \ DbTransactionHandler))

3 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array (matriz, matriz)

4 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate \ Container \ BoundMethod :: Illuminate \ Container \ {cierre} ()

5 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate \ Container \ Util :: desenvolverIfClosure (Objeto (Cierre))

6 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate \ Container \ BoundMethod :: callBoundMethod (Object (Illuminate \ Foundation \ Application) , Matriz, objeto (cierre))

7 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate \ Container \ BoundMethod :: call (Object (Illuminate \ Foundation \ Application) , Matriz, Matriz, NULL)

8 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate \ Container \ Container-> llamar (Array)

9 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Iluminar \ Bus \ Dispatcher-> Iluminar \ Bus \ {cierre} (Objeto ( Maatwebsite \ Excel \ Jobs \ ReadChunk))

10 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate \ Pipeline \ Pipeline-> Illuminate \ Pipeline \ {cierre} (Objeto ( Maatwebsite \ Excel \ Jobs \ ReadChunk))

11 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate \ Pipeline \ Pipeline-> luego (Objeto (Cierre))

12 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(83): Illuminate \ Bus \ Dispatcher-> dispatchNow (Object (Maatwebsite \ Excel \ Jobs \ ReadChunk), falso)

13 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Iluminar \ Cola \ CallQueuedHandler-> Iluminar \ Cola \ {cierre} (Objeto ( Maatwebsite \ Excel \ Jobs \ ReadChunk))

14 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): Illuminate \ Pipeline \ Pipeline-> Illuminate \ Pipeline \ {cierre} (Objeto ( Maatwebsite \ Excel \ Jobs \ ReadChunk))

15 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(85): Illuminate \ Pipeline \ Pipeline-> luego (Objeto (Cierre))

16 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(59): Illuminate \ Queue \ CallQueuedHandler-> dispatchThroughMiddleware (Object (Illuminate \ Queue \ Jobs \ DatabaseJob), Objeto (Maatwebsite \ Excel \ Jobs \ ReadChunk))

17 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(98): Illuminate \ Queue \ CallQueuedHandler-> llamar (Object (Illuminate \ Queue \ Jobs \ DatabaseJob), Array)

18 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(356): Illuminate \ Queue \ Jobs \ Job-> fire ()

19 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(306): Illuminate \ Queue \ Worker-> proceso ('base de datos', Objeto (Iluminar \ Queue \ Jobs \ DatabaseJob), Objeto (Illuminate \ Queue \ WorkerOptions))

20 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(132): Illuminate \ Queue \ Worker-> runJob (Object (Illuminate \ Queue \ Jobs \ DatabaseJob), 'base de datos', Objeto (Illuminate \ Queue \ WorkerOptions))

21 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate \ Queue \ Worker-> daemon ('base de datos', 'predeterminado ', Objeto (Illuminate \ Queue \ WorkerOptions))

22 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate \ Queue \ Console \ WorkCommand-> runWorker ('base de datos', 'defecto')

23 [función interna]: Illuminate \ Queue \ Console \ WorkCommand-> handle ()

24 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array (matriz, matriz)

25 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate \ Container \ BoundMethod :: Illuminate \ Container \ {cierre} ()

26 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate \ Container \ Util :: desenvolverIfClosure (Objeto (Cierre))

27 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate \ Container \ BoundMethod :: callBoundMethod (Object (Illuminate \ Foundation \ Application) , Matriz, objeto (cierre))

28 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Container/Container.php(592): Illuminate \ Container \ BoundMethod :: call (Object (Illuminate \ Foundation \ Application) , Matriz, Matriz, NULL)

29 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate \ Container \ Container-> llamar (Array)

30 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Command/Command.php(255): Illuminate \ Console \ Command-> ejecutar (Objeto (Symfony \ Component \ Console \ Input \ ArgvInput) , Objeto (Illuminate \ Console \ OutputStyle))

31 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony \ Component \ Console \ Command \ Command-> ejecutar (Object (Symfony \ Componente \ Consola \ Entrada \ ArgvInput), Objeto (Illuminate \ Console \ OutputStyle))

32 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(912): Illuminate \ Console \ Command-> ejecutar (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Object (Symfony \ Component \ Console \ Output \ ConsoleOutput))

33 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(264): Symfony \ Component \ Console \ Application-> doRunCommand (Object (Illuminate \ Queue \ Console \ WorkCommand), Object (Symfony \ Component \ Console \ Input \ ArgvInput), Objeto (Symfony \ Component \ Console \ Output \ ConsoleOutput))

34 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(140): Symfony \ Component \ Console \ Application-> doRun (Objeto (Symfony \ Component \ Console \ Input \ ArgvInput) , Objeto (Symfony \ Component \ Console \ Output \ ConsoleOutput))

35 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony \ Component \ Console \ Application-> ejecutar (Objeto (Symfony \ Component \ Console \ Input \ ArgvInput), Objeto (Symfony \ Component \ Console \ Output \ ConsoleOutput))

36 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(130): Illuminate \ Console \ Application-> ejecutar (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Objeto (Symfony \ Component \ Console \ Output \ ConsoleOutput))

37 / var / www / html / sites / dashboard-imprensa / artisan (37): Illuminate \ Foundation \ Console \ Kernel-> handle (Object (Symfony \ Component \ Console \ Input \ ArgvInput), Object (Symfony \ Component \ Console \ Salida \ ConsoleOutput))

38 {principal}

"}
`` ``

Este es el error que recibo, pero el archivo que envié era 'temp / 12020-04.xlsx'. Ya verifiqué si de hecho está recibiendo este archivo. Si crea una temperatura, ¿por qué no puede encontrar el archivo?

Intente configurar una carpeta temporal diferente https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L166

Hola @patrickbrouwers , muchas gracias por tu rápida respuesta. Intenté eso pero no resolvió mi problema :(

$header = (new HeadingRowImport)->toArray($request->file('arquivo'))[0][0];

$file = Storage::putFileAs(
    'temp',
    $request->file('arquivo'),
    $request->input('dashboard_id') . str_replace("/", "-", $request->input('ano_mes')) . '.' . pathinfo($request->file('arquivo')->getClientOriginalName())['extension']
);

if ($request->input('acao') == "import") {
    Excel::import((new DadosImport($request->input('ano_mes'), $request->input('dashboard_id'), $header, $file, true)), $file);
} else {
    Excel::import((new DadosImport($request->input('ano_mes'), $request->input('dashboard_id'), $header, $file)), $file);
}

Esta es mi función de importación, es bastante estándar. El archivo se guarda en la carpeta correcta. También intenté usar public_path ($ file). ¿La importación crea un archivo temporal?

Eliminé el proyecto, reinstalé todo y ahora todo está funcionando jaja, muchas gracias por tu ayuda :))

Usé el trabajo de cola para exportar Excel y el trabajo no se puede ejecutar porque me muestra una excepción:
ErrorException: fopen (/var/www/html/biomaze.ir/storage/framework/laravel-excel/laravel-excel-85fvUcwqDwshFsD4o5PWwtamG83wnzG6): no se pudo abrir la transmisión: Permiso denegado en /var/www/html/biomaze.ir/vendor / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer / BaseWriter. php: 111

por favor ayuda

Intente cambiar el propietario y los permisos en storage
sudo chown -R www-data:<your_username> storage/ && sudo chmod -R g+w storage/

Tengo el mismo problema.

Estoy ejecutando mi entorno de desarrollo dentro de Homestead, el archivo temporal se crea bien (para que la aplicación pueda ver el csv cargado), sin embargo, phpspreadsheet parece tener problemas para encontrar el archivo cuando se ejecuta dentro de una cola:

InvalidArgumentException {#1344 #message: "File "/home/vagrant/code/storage/app/data-imports/laravel-excel-YNpPHnBtKZXaXKIbR68goCYM5qLlzUxt.csv" does not exist." #code: 0 #file: "./vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php" #line: 135

La cola no pasará del trabajo ReadChunk inicial. Si utilizo tinker y hago un file_exists () en esta ruta, el archivo está allí.

¿Alguien se enfrentó a esto y lo resolvió?

Entonces, el problema estaba siendo causado por la cola: el comando de

Para eliminar este problema, DEBE ejecutar el trabajador de cola desde dentro de vagrant.

vagabundo ssh
código cd
php artisan queue: escuchar

funciona dulce.

https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L166

¿Cómo puedo configurar una carpeta diferente @patrickbrouwers ?

Este es mi archivo de configuración

`<?php

use Maatwebsite\Excel\Excel;

return [
    'exports' => [

    /*
    |--------------------------------------------------------------------------
    | Chunk size
    |--------------------------------------------------------------------------
    |
    | When using FromQuery, the query is automatically chunked.
    | Here you can specify how big the chunk should be.
    |
    */
    'chunk_size'             => 1000,

    /*
    |--------------------------------------------------------------------------
    | Pre-calculate formulas during export
    |--------------------------------------------------------------------------
    */
    'pre_calculate_formulas' => false,

    /*
    |--------------------------------------------------------------------------
    | Enable strict null comparison
    |--------------------------------------------------------------------------
    |
    | When enabling strict null comparison empty cells ('') will
    | be added to the sheet.
    */
    'strict_null_comparison' => false,

    /*
    |--------------------------------------------------------------------------
    | CSV Settings
    |--------------------------------------------------------------------------
    |
    | Configure e.g. delimiter, enclosure and line ending for CSV exports.
    |
    */
    'csv'                    => [
        'delimiter'              => ',',
        'enclosure'              => '"',
        'line_ending'            => PHP_EOL,
        'use_bom'                => false,
        'include_separator_line' => false,
        'excel_compatibility'    => false,
    ],

    /*
    |--------------------------------------------------------------------------
    | Worksheet properties
    |--------------------------------------------------------------------------
    |
    | Configure e.g. default title, creator, subject,...
    |
    */
    'properties'             => [
        'creator'        => '',
        'lastModifiedBy' => '',
        'title'          => '',
        'description'    => '',
        'subject'        => '',
        'keywords'       => '',
        'category'       => '',
        'manager'        => '',
        'company'        => '',
    ],
],

'imports'            => [

    /*
    |--------------------------------------------------------------------------
    | Read Only
    |--------------------------------------------------------------------------
    |
    | When dealing with imports, you might only be interested in the
    | data that the sheet exists. By default we ignore all styles,
    | however if you want to do some logic based on style data
    | you can enable it by setting read_only to false.
    |
    */
    'read_only' => true,

    /*
    |--------------------------------------------------------------------------
    | Ignore Empty
    |--------------------------------------------------------------------------
    |
    | When dealing with imports, you might be interested in ignoring
    | rows that have null values or empty strings. By default rows
    | containing empty strings or empty values are not ignored but can be
    | ignored by enabling the setting ignore_empty to true.
    |
    */
    'ignore_empty' => false,

    /*
    |--------------------------------------------------------------------------
    | Heading Row Formatter
    |--------------------------------------------------------------------------
    |
    | Configure the heading row formatter.
    | Available options: none|slug|custom
    |
    */
    'heading_row' => [
        'formatter' => 'slug',
    ],

    /*
    |--------------------------------------------------------------------------
    | CSV Settings
    |--------------------------------------------------------------------------
    |
    | Configure e.g. delimiter, enclosure and line ending for CSV imports.
    |
    */
    'csv'         => [
        'delimiter'        => ',',
        'enclosure'        => '"',
        'escape_character' => '\\',
        'contiguous'       => false,
        'input_encoding'   => 'UTF-8',
    ],

    /*
    |--------------------------------------------------------------------------
    | Worksheet properties
    |--------------------------------------------------------------------------
    |
    | Configure e.g. default title, creator, subject,...
    |
    */
    'properties'  => [
        'creator'        => '',
        'lastModifiedBy' => '',
        'title'          => '',
        'description'    => '',
        'subject'        => '',
        'keywords'       => '',
        'category'       => '',
        'manager'        => '',
        'company'        => '',
    ],

],

/*
|--------------------------------------------------------------------------
| Extension detector
|--------------------------------------------------------------------------
|
| Configure here which writer/reader type should be used when the package
| needs to guess the correct type based on the extension alone.
|
*/
'extension_detector' => [
    'xlsx'     => Excel::XLSX,
    'xlsm'     => Excel::XLSX,
    'xltx'     => Excel::XLSX,
    'xltm'     => Excel::XLSX,
    'xls'      => Excel::XLS,
    'xlt'      => Excel::XLS,
    'ods'      => Excel::ODS,
    'ots'      => Excel::ODS,
    'slk'      => Excel::SLK,
    'xml'      => Excel::XML,
    'gnumeric' => Excel::GNUMERIC,
    'htm'      => Excel::HTML,
    'html'     => Excel::HTML,
    'csv'      => Excel::CSV,
    'tsv'      => Excel::TSV,

    /*
    |--------------------------------------------------------------------------
    | PDF Extension
    |--------------------------------------------------------------------------
    |
    | Configure here which Pdf driver should be used by default.
    | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF
    |
    */
    'pdf'      => Excel::DOMPDF,
],

/*
|--------------------------------------------------------------------------
| Value Binder
|--------------------------------------------------------------------------
|
| PhpSpreadsheet offers a way to hook into the process of a value being
| written to a cell. In there some assumptions are made on how the
| value should be formatted. If you want to change those defaults,
| you can implement your own default value binder.
|
| Possible value binders:
|
| [x] Maatwebsite\Excel\DefaultValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class
| [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class
|
*/
'value_binder' => [
    'default' => Maatwebsite\Excel\DefaultValueBinder::class,
],

'cache' => [
    /*
    |--------------------------------------------------------------------------
    | Default cell caching driver
    |--------------------------------------------------------------------------
    |
    | By default PhpSpreadsheet keeps all cell values in memory, however when
    | dealing with large files, this might result into memory issues. If you
    | want to mitigate that, you can configure a cell caching driver here.
    | When using the illuminate driver, it will store each value in a the
    | cache store. This can slow down the process, because it needs to
    | store each value. You can use the "batch" store if you want to
    | only persist to the store when the memory limit is reached.
    |
    | Drivers: memory|illuminate|batch
    |
    */
    'driver'     => 'memory',

    /*
    |--------------------------------------------------------------------------
    | Batch memory caching
    |--------------------------------------------------------------------------
    |
    | When dealing with the "batch" caching driver, it will only
    | persist to the store when the memory limit is reached.
    | Here you can tweak the memory limit to your liking.
    |
    */
    'batch'     => [
        'memory_limit' => 60000,
    ],

    /*
    |--------------------------------------------------------------------------
    | Illuminate cache
    |--------------------------------------------------------------------------
    |
    | When using the "illuminate" caching driver, it will automatically use
    | your default cache store. However if you prefer to have the cell
    | cache on a separate store, you can configure the store name here.
    | You can use any store defined in your cache config. When leaving
    | at "null" it will use the default store.
    |
    */
    'illuminate' => [
        'store' => null,
    ],
],

/*
|--------------------------------------------------------------------------
| Transaction Handler
|--------------------------------------------------------------------------
|
| By default the import is wrapped in a transaction. This is useful
| for when an import may fail and you want to retry it. With the
| transactions, the previous import gets rolled-back.
|
| You can disable the transaction handler by setting this to null.
| Or you can choose a custom made transaction handler here.
|
| Supported handlers: null|db
|
*/
'transactions' => [
    'handler' => 'db',
],

'temporary_files' => [

    /*
    |--------------------------------------------------------------------------
    | Local Temporary Path
    |--------------------------------------------------------------------------
    |
    | When exporting and importing files, we use a temporary file, before
    | storing reading or downloading. Here you can customize that path.
    |
    */
    'local_path'          => storage_path('framework/laravel-excel'),

    /*
    |--------------------------------------------------------------------------
    | Remote Temporary Disk
    |--------------------------------------------------------------------------
    |
    | When dealing with a multi server setup with queues in which you
    | cannot rely on having a shared local temporary path, you might
    | want to store the temporary file on a shared disk. During the
    | queue executing, we'll retrieve the temporary file from that
    | location instead. When left to null, it will always use
    | the local path. This setting only has effect when using
    | in conjunction with queued imports and exports.
    |
    */
    'remote_disk'         => null,
    'remote_prefix'       => null,

    /*
    |--------------------------------------------------------------------------
    | Force Resync
    |--------------------------------------------------------------------------
    |
    | When dealing with a multi server setup as above, it's possible
    | for the clean up that occurs after entire queue has been run to only
    | cleanup the server that the last AfterImportJob runs on. The rest of the server
    | would still have the local temporary file stored on it. In this case your
    | local storage limits can be exceeded and future imports won't be processed.
    | To mitigate this you can set this config value to be true, so that after every
    | queued chunk is processed the local temporary file is deleted on the server that
    | processed it.
    |
    */
    'force_resync_remote' => null,
    ],
];

'

¿Fue útil esta página
0 / 5 - 0 calificaciones