---
title: "Dávky súborov — Imports for Laravel | Roundly"
description: "Viac súborov alebo ZIP, jeden záznam na súbor — FileImporter, povolené prípony, kontrola duplicít cez SHA-256, ImportFile a ochrana pred ZIP bombami."
url: https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel/davky-suborov
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Imports for Laravel](https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel.md)

# Dávky súborov

FileImporter zmení každý nahratý súbor — alebo každú položku ZIP-u — na jeden záznam, napríklad dokument:

```php
use RoundlyConsulting\Imports\Definition\{FileRules, Ownership};
use RoundlyConsulting\Imports\FileImporter;
use RoundlyConsulting\Imports\Rows\{ImportContext, ImportFile};

final class DocumentsImporter extends FileImporter
{
    public function key(): string { return 'documents'; }
    public function label(): string { return 'Documents'; }
    public function ownership(): Ownership { return Ownership::column('team_id'); }
    public function accepts(): FileRules { return FileRules::extensions('pdf', 'docx')->maxSize(20_480); }

    public function authorize(?Authenticatable $user, Model $owner, ImportOperation $operation): bool
    {
        return $user?->can('manage-documents', $owner) ?? false;
    }

    public function create(ImportFile $file, ImportContext $context): Model
    {
        return Document::create(['team_id' => $context->owner->getKey(), 'name' => $file->name, 'path' => $file->storeOn('documents')]);
    }
}

Imports::for($team)->by($user)->uploadFiles('documents', $request->file('files'))->preview()->commit();
```

## Metódy

| Metóda | Povinná | Predvolené |
| --- | --- | --- |
| `key() · label()` | nie | z názvu triedy, ako pri Importer |
| `ownership(): Ownership · authorize(?Authenticatable, Model $owner, ImportOperation): bool` | áno | — (bezpečné odmietnutie) |
| `accepts(): FileRules` | áno | — |
| `create(ImportFile $file, ImportContext $context): Model` | áno | — |
| `duplicateCheck(): FileDuplicates` | nie | FileDuplicates::ledger() |
| `rollback() · changeDetection() · checksumAttributes()` | nie | ako pri Importer |

FileRules::extensions('pdf', 'docx') (porovnanie malými písmenami) alebo FileRules::any(), potom ->maxSize(int $kilobytes) (predvolene imports.files.max\_file\_size); allows() a maxBytes() ho spätne prečítajú. Importér súborov nemá polia, mapovanie ani režimy — Imports::importer('documents')->modes() je \[\] a jeho popis uvádza extensions.

## Náhľad a duplicity

- Vstup: jedno alebo viac nahratí a/alebo archívov ZIP (názov .zip s obsahom ZIP); každý súbor alebo položka je jeden riadok, najviac files.max\_files. Každá položka je vo výsledkoch riadkov (názov, veľkosť, SHA-256, stav).
- Pre každý súbor: platný, neplatný (extension\_not\_allowed, file\_too\_large, empty\_file), duplicitný v dávke (duplicate\_file) alebo v skoršom importe tohto vlastníka a importéra, ktorého záznam stále existuje (file\_imported\_earlier).
- Súbor, ktorého záznam vrátenie ponechalo, sa stále ráta ako importovaný; súbor sa dá znova importovať, len ak vrátenie záznam odstránilo (deleted, handled, missing).
- Hashe sa pri importe overia znova. Import a vrátenie fungujú ako pri riadkoch — číslo riadka je index položky a evidencia si uchová hash obsahu.
- errorReport() vypíše odmietnuté súbory: stĺpce File a Errors, jeden riadok na súbor.

```php
use RoundlyConsulting\Imports\Definition\FileDuplicates;

public function duplicateCheck(): FileDuplicates
{
    return FileDuplicates::using(
        fn (string $sha256, Model $owner) => Document::whereBelongsTo($owner, 'team')->where('sha256', $sha256)->first(),
    );   // or FileDuplicates::ledger() (the default), FileDuplicates::none()
}
```

## ImportFile

```php
$file->index;                  // the entry index (the row number)
$file->name;                   // sanitised, metadata only
$file->extension; $file->size; $file->sha256;
$file->readStream();           // a resource
$file->contents();             // small files only
$file->storeOn('s3', 'documents');   // copies under a generated ULID name + extension, returns the path
```

Kópie vytvorené cez storeOn() sú mimo transakcie importu: vrátená časť po sebe môže jednu nechať, preto ich spárujte s háčikom rollback() alebo upratovaním, ak na tom záleží.

## Bezpečnosť ZIP

- Kontroluje sa pred akýmkoľvek rozbalením: otvorenie len na čítanie s kontrolou konzistencie; archív do files.max\_archive\_size; položky do files.max\_files; deklarovaný celkový objem do files.max\_uncompressed; každá položka do limitu veľkosti importéra.
- Kompresný pomer do files.max\_ratio, pre každú položku aj celkovo, pri všetkom nad files.ratio\_min\_size.
- Názvy: žiadne absolútne cesty, žiadne .. (ani so spätnými lomkami), žiadne riadiace znaky, najviac 255 bajtov; žiadne symbolické odkazy; žiadne šifrované položky. Adresáre a položky z files.ignore sa preskočia; vnorené archívy sú obyčajné súbory.
- Pri rozbaľovaní sa skutočne rozbalené bajty rátajú pre každú položku aj celkovo — nepravdivá hlavička sa zastaví uprostred streamu.
- Položky sa ukladajú pod generovanými názvami; žiadna cesta z archívu sa nikdy nedostane na disk. Akékoľvek porušenie odmietne celé nahratie a zmaže, čo sa už pripravilo.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/imports-for-laravel.md)
