Laravel-excel: [PERTANYAAN] Pekerjaan membaca potongan antrian gagal

Dibuat pada 17 Okt 2018  ·  21Komentar  ·  Sumber: Maatwebsite/Laravel-Excel

HARAP BACA: MENGISI TEMPLATE DIPERLUKAN! Masalah yang tidak mencakup informasi yang cukup mungkin tidak diambil. Sudahkah Anda membaca pedoman kontribusi Laravel-Excel (https://laravel-excel.maatwebsite.nl/docs/3.1/getting-started/contributing) dan Kode Etik (https://github.com/Maatwebsite/Laravel-Excel/ gumpalan/3.1/CODE_OF_CONDUCT.md)? Dengan mengajukan Masalah, Anda diharapkan untuk mematuhinya, termasuk memperlakukan semua orang dengan hormat. Harap awali masalah Anda dengan salah satu dari berikut ini: [BUG] [PROPOSAL] [QUESTION].

Prasyarat

Beri tanda X di antara tanda kurung jika Anda telah melakukan hal berikut:
  • [ ] Mampu mereproduksi perilaku di luar kode Anda, masalahnya diisolasi ke Laravel Excel.
  • [x] Memeriksa apakah masalah Anda belum diajukan.
  • [x] Diperiksa jika tidak ada PR yang dikirimkan yang memperbaiki masalah ini.

Versi

Harap setepat dan selengkap mungkin saat membuktikan nomor versi
  • Versi PHP: 7.1.23
  • Versi Laravel: 5.6
  • Versi paket: 3.1.2

Keterangan

Ketika saya mencoba mengimpor file (tidak masalah apakah itu .xlsx, .ods atau .csv) dan mengantre pembacaan potongan, pekerjaan gagal dengan kesalahan ini di tabel fail_jobs saya:
InvalidArgumentException: File "/tmp/SWQF2KfyI6BP0k1x" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Langkah-langkah untuk Reproduksi

Bagaimana masalah ini dapat direproduksi? Berikan file Excel atau repositori reproduksi untuk membantu kami mereproduksi masalah dengan mudah.

Perilaku yang diharapkan:

Saya mengharapkan pekerjaan selesai tanpa kegagalan. Jika saya tidak mengantri pekerjaan itu berfungsi tanpa masalah.

Perilaku sebenarnya:
Jejak tumpukan di tabel failed_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}

informasi tambahan

Dari jejak tumpukan kesalahan tampaknya berasal dari PhpSpreadsheet , saya pikir itu adalah masalah hak baca/tulis, tetapi folder /tmp adalah 777, dan file php.ini saya tidak berubah sejak instalasi (kecuali untuk upload_max_filesize post_max_size).

Kelas Impor Kontak saya:

<?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

Komentar yang paling membantu

Coba ubah temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) ke misalnya folder penyimpanan Anda. Mungkin memperbaiki masalah untuk Anda.

Semua 21 komentar

Hai @MLuis ,

Bisakah Anda memeriksa kode pengontrol Anda?
Anda menggunakan sifat yang Dapat Diimpor, jadi di pengontrol Anda, Anda harus menggunakan
(new ContactsImport)->queue('file.ext');

Silakan merujuk ke Yang Dapat Diimpor

Jika masalah masih belum teratasi setelah ini, harap posting kode pengontrol Anda juga.

Hai @GlennM , terima kasih atas balasan Anda!

Di pengontrol saya, saya mencoba keduanya:

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

Saya juga mencoba menyimpan file yang dikirimkan pengguna terlebih dahulu sebelum meneruskannya ke 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);

Tapi saya masih mendapatkan kesalahan yang sama InvalidArgumentException: File "/tmp/whatever" does not exist. in /home/miguel/www/html/proliste/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Shared/File.php:137

Pengontrol Daftar Saya:

<?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');
    }
}

Sayangnya, saya tidak dapat mereproduksinya.

Kode berikut harus bekerja di controller:

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');
}

FYI, saya menggunakan versi yang disederhanakan, ini adalah metode di controller saya:

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

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

Dan kelas UsersImport saya:

<?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;
    }
}

Saya mencoba menambahkan/menghapus WithHeadingRow , WithBatchInserts , WithChunkReading , Importable , menggunakan ToCollection alih-alih ToModel tanpa hasil . Ini hanya berfungsi ketika saya tidak mengantri pekerjaan.

Dan saya tidak punya masalah mengekspor daftar dengan pekerjaan yang antri, hanya impor yang gagal.

Mungkin masalahnya berasal dari kesalahan konfigurasi server dev saya?

Mungkin masalahnya berasal dari kesalahan konfigurasi server dev saya?

Itu mungkin memang benar.
Saya menguji pada PHP 7.1 / Laravel 5.6 dan PHP 7.2 / Laravel 5.7 dan dapat mengimpor file dalam kedua kasus, menggunakan T oModel , WithHeadingRow , WithBatchInserts , WithChunkReading dan ShouldQueue dan Importable

Jika Anda menggunakan perangkat lunak secara komersial dan membutuhkan dukungan yang rumit atau sangat membutuhkannya, kami dapat menawarkannya secara komersial. Silakan merujuk ke halaman Dukungan kami dalam kasus itu.

Saya mungkin memimpin: setelah mencoba ekspor antrian 150K+ baris, pekerjaan gagal memberi saya kesalahan yang sama, tetapi tidak langsung seperti dengan impor, setelah 20 AppendQueryToSheet pekerjaan.
Jadi mungkin ada masalah dengan folder /tmp , seperti batas ukuran. Saya menggunakan Debian 9, tetapi saya hanya memiliki 3 partisi: / (berisi /tmp ), /home dan swap , ini bukan ukuran partisi membatasi.

Saya akan memberi Anda pembaruan jika saya menemukan sesuatu! :berdoa:

__Edit__
Haruskah saya mengganti nama masalah ini sebagai [QUESTION] alih-alih [BUG] ?

Coba ubah temp_path (https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L28) ke misalnya folder penyimpanan Anda. Mungkin memperbaiki masalah untuk Anda.

Terima kasih @patrickbrouwers , ini memperbaiki masalah saya, saya dapat mengimpor dan mengekspor file besar tanpa kesalahan!

@patrickbrouwers tidak ada temp_path di konfigurasi excel. dapatkah Anda menguraikannya?

@sharjeelz jika Anda memiliki file konfigurasi versi terbaru, lihat: https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L167 Saat ini ada fallback pada temp_path untuk orang yang menggunakan yang lama konfigurasi

Hai teman-teman, saya tahu ini masalah basi. Tapi sepertinya saya mengalami masalah yang sangat mirip. Baik rekan kerja saya dan saya menjalankan basis kode yang sama, di mana saya mendapatkan "File X tidak ada" dan dia tidak. Kami menduga ini masalah konfigurasi. Tetapi bahkan ketika saya mengubah config/local_path, saya masih tidak dapat mengatasi masalah tersebut.

Saya benar-benar hanya mencari masalah yang diketahui yang dapat menyebabkan ini. Kami berdua menjalankan proyek Laravel kami secara lokal di macbook dan menggunakan versi lib 3.1.17

Nama file C:UsersAshimAppDataLocalTemplaravel-excel-K6OeXpSQuAARlI0UrSeOAkFZ0kELq0Ax.xls tidak dikenali sebagai file OLE

Bagaimana saya bisa memecahkan masalah ini

Halo, saya mengalami masalah yang sama tetapi pertanyaan saya adalah: mengapa ini menunjukkan nama file yang berbeda dari yang saya kirim dalam fungsi impor? Apakah itu membuat file temp dari mana ia membaca info?

````
[2020-04-17 15:15:26] local.ERROR: File "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" tidak ada. {"exception":"[object] (InvalidArgumentException(code: 0): File "/tmp/laravel-excel-rKsJKI2Clu2sEV3OqMtPngacRRZd8iJM.xlsx" tidak ada. di /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- mantan...')

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

2 [fungsi internal]: 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(Array, Array)

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

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

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

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

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

9 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object( 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\{closure}(Object( Maatwebsite\Excel\Jobs\ReadChunk))

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

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), salah)

13 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(128): Illuminate\Queue\CallQueuedHandler->Illuminate\Queue\{closure}(Object( 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\{closure}(Object( Maatwebsite\Excel\Jobs\ReadChunk))

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

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), Objek(Maatwebsite\Excel\Jobs\ReadChunk))

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

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->process('database', Object(Illuminate\ Queue\Jobs\DatabaseJob), Object(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), 'database', Object(Illuminate\Queue\WorkerOptions))

21 /var/www/html/sites/dashboard-imprensa/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate\Queue\Worker->daemon('database', 'default ', Objek(Menerangi\Antrian\PekerjaOptions))

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

23 [fungsi internal]: 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(Array, Array)

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

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

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

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

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

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

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

32 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(912): Illuminate\Console\Command->run(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), Objek (Symfony\Component\Console\Output\ConsoleOutput))

34 /var/www/html/sites/dashboard-imprensa/vendor/symfony/console/Application.php(140): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput) , Objek(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->run(Object(Symfony\Component\ Console\Input\ArgvInput), Objek(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->run(Object(Symfony\Component\ Console\Input\ArgvInput), Objek(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 \Output\ConsoleOutput))

38 {utama}

"}
````

Ini adalah kesalahan yang saya terima tetapi file yang saya kirim adalah 'temp/12020-04.xlsx'. Saya sudah memeriksa apakah memang menerima file ini. Jika itu membuat temp, mengapa tidak dapat menemukan file?

Hai @patrickbrouwers , terima kasih banyak atas tanggapan cepat Anda. Saya mencoba itu tetapi itu tidak menyelesaikan masalah saya :(

$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);
}

Ini adalah fungsi impor saya, ini cukup standar. File disimpan di folder kanan. Saya juga mencoba menggunakan public_path($file). Apakah impor membuat file temp?

Saya menghapus proyek, menginstal ulang semuanya dan sekarang semuanya berfungsi hahah terima kasih banyak atas bantuan Anda :))

Saya menggunakan pekerjaan antrian untuk ekspor excel dan pekerjaan tidak dapat berjalan karena itu menunjukkan kepada saya pengecualian:
ErrorException: fopen(/var/www/html/biomaze.ir/storage/framework/laravel-excel/laravel-excel-85fvUcwqDwshFsD4o5PWwtamG83wnzG6): gagal membuka streaming: Izin ditolak di /var/www/html/biomaze.ir/vendor /phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/BaseWriter. php:111

tolong bantu? tolong

Coba ubah pemilik dan izin pada storage
sudo chown -R www-data:<your_username> storage/ && sudo chmod -R g+w storage/

Saya mendapatkan masalah yang sama.

Saya menjalankan dev env saya di dalam wisma, file temp dibuat dengan baik (sehingga aplikasi dapat melihat csv yang diunggah), namun phpspreadsheet tampaknya mengalami masalah dalam menemukan file saat berjalan dalam antrian:

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

Antrian tidak akan melewati tugas ReadChunk awal. Jika saya menggunakan tinker dan melakukan file_exists() di jalur ini, file tersebut ada di sana.

Adakah yang menghadapi ini dan menyelesaikannya?

Jadi, masalahnya disebabkan oleh perintah queue:listen yang dijalankan LUAR dari gelandangan.

Untuk menghilangkan masalah ini, Anda HARUS menjalankan pekerja antrian dari dalam gelandangan.

gelandangan ssh
kode cd
antrian tukang php

bekerja manis.

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

Bagaimana cara mengatur Folder Berbeda @patrickbrouwers ?

Ini adalah file konfigurasi saya

`<?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,
    ],
];

`

Apakah halaman ini membantu?
0 / 5 - 0 peringkat