Chunky for Laravel
Nagy fájlok megbízható feltöltése lassú vagy megszakadó kapcsolaton is. A fájl darabokban megy fel, oldalváltáskor sem áll le, és ha megszakad, a fájlt újra kiválasztva ott folytatódik, ahol elakadt. Alapból nem kell hozzá queue worker és broadcasting.
$ composer require netipar/laravel-chunky
Frontend: npm install @netipar/chunky-core, vagy a Vue 3-, React- és Alpine.js-kliens.
import { manager, configure } from '@netipar/chunky-core';
configure({
baseUrl: '/api/chunky',
headers: { 'X-CSRF-TOKEN': csrfToken },
});
const uploader = manager.upload(file, { profile: 'avatar' });
uploader.subscribe((state) => {
console.log(state.status, state.progress, state.etaSeconds);
});
const result = await uploader.upload(); // resolves once assembled
console.log(result.file?.url, result.payload?.media_id);
- Legújabb verzió
- v1.0.0
- 2026. augusztus 6.
- Követelmények
- PHP 8.3+
- Laravel 12 és 13
- Licenc
- MIT
- üzleti célra is szabadon
- Letöltések
- 2 771
- Packagist, összesen
Mire jó?
Feltöltés, ami nem kezdődik elölről
Videó, tervrajz vagy archívum: a nagy fájl akkor is felér, ha közben megszakad a kapcsolat.
-
Folytatható feltöltés
A szerver darabonként tartja nyilván a feltöltést. Ha ugyanazt a fájlt újra elindítják, az ujjlenyomata alapján ott folytatja, ahol abbamaradt.
Így működik:
fájl-ujjlenyomat az indításkor -
Oldalváltáskor sem áll le
A feltöltést egy modulszintű kezelő birtokolja, így SPA-navigációnál vagy komponenscserénél sem szakad meg.
Így működik:
manager.upload() -
Infrastruktúra nélkül is kész
Alapbeállítással a 256 MB alatti fájlok még a kérésen belül összeállnak, az eredmény a válaszban érkezik. Worker és broadcasting csak a skálázáshoz kell.
Így működik:
assembly.mode = auto -
Közvetlenül S3-ba
A darabok előre aláírt URL-eken egyenesen az S3-ba mennek. A PHP nem is látja a bájtokat, és nincs külön összefűzési lépés.
Így működik:
transport(): 'direct_s3' -
Ellenőrzött épség
Kérésre a teljes fájl SHA-256 ellenőrzőösszege is elkészül, és a szerver az összeállított fájlt ehhez méri.
Így működik:
fileChecksum: true -
Biztonságos alapértelmezés
Bejelentkezett felhasználónál a feltöltés a feltöltőé: más nem kérdezheti le, nem szakíthatja meg, és nem küldhet bele darabot. Idegen feltöltés lekérdezésére 404 a válasz, így az azonosítók nem találgathatók.
Így működik:
Authorizer
Egy JavaScript-motor, négy keretrendszer:
-
Mag
@netipar/chunky-coreFeltöltés, szünet, folytatás, köteg, előnézet -
Vue 3
@netipar/chunky-vue3useUpload, UploadTray, ChunkDropzone -
React
@netipar/chunky-reactChunkyProvider, useUpload -
Alpine.js
@netipar/chunky-alpinechunkyUpload komponens -
Livewire
<livewire:chunky-upload />Kész widget az Alpine-kliensre építve
Így működik
A feltöltés útja az első darabtól a kész fájlig
-
1
Indítás
Azonosító, darabméret és darabszám; egyező ujjlenyomatnál folytatás.
POST /upload -
2
Darabok
Párhuzamosan mennek fel, átmeneti hibánál újrapróbálva.
POST /upload/{id}/chunks -
3
Összeállítás
Streamelve, a fájl memóriába töltése nélkül; szinkron vagy sorba állítva.
assembly.mode -
4
A te logikád
A feltöltési profil dönt: hová kerül a fájl, és mi történjen utána.
completed() -
5
Eredmény
A fájl és a payload a válaszban érkezik; sorba állításnál a kliens magától lekérdezi.
await uploader.upload()
Tizenegy Laravel-esemény jelzi a feltöltés életútját. A broadcasting alapból ki van kapcsolva; bekapcsolva a gyakori, darabonkénti eseményeket kihagyja, és belső útvonalak nélkül küld.
Kódpéldák
A te frontended, ugyanaz a motor
<script setup lang="ts">
import { useUpload } from '@netipar/chunky-vue3';
const { start, state, previewUrl } = useUpload();
const onPick = (e: Event) =>
start((e.target as HTMLInputElement).files![0], { profile: 'avatar' });
</script>
<template>
<input type="file" @change="onPick" />
<img v-if="previewUrl" :src="previewUrl" alt="" />
<progress v-if="state" :value="state.progress" max="100" />
</template>
Minőség
Tesztelve, verziózva, dokumentálva
Kompatibilitás
Minden változtatás után mind a hat párosításon lefut a tesztcsomag (GitHub Actions).
| PHP | Laravel 12 | Laravel 13 |
|---|---|---|
| 8.3 | ||
| 8.4 | ||
| 8.5 |
Amire számíthatsz
- 175 Pest- és 64 Vitest-teszt
- PHPStan legszigorúbb szintje és szigorú TypeScript
- Adatbázis- és fájlrendszer-driver ugyanazzal a tesztcsomaggal
-
chunky:doctor: élő egészségellenőrzés, CI- és deploykapuként is - Protokoll-leírás angolul és magyarul, OpenAPI-specifikáció
- Laravel Boost skillek a backendhez és a frontendhez
Verziótörténet
Teljes CHANGELOG (új lapon nyílik)-
v1.0.0
Az alapoktól újraírt, stabil API: feltöltési profilok, szinkron összeállítás alapból, oldalváltás-biztos kezelő, közvetlen S3-feltöltés és SHA-256-ellenőrzés.
-
v0.22.6
Javítás: típushiba, ha a darabméret a .env-ből érkezik.
-
v0.22.5
Az npm-kliensek újra a Composer-csomaggal azonos verzión jelennek meg.
-
v0.22.4
A migrációk sorrendjének javítása MySQL-en és PostgreSQL-en.
Az első kiadás 2026. március 8-án jelent meg, eddig összesen 37 kiadás készült. Frissítés 0.x-ről: UPGRADE.md (új lapon nyílik)
Élesben
TARR és NETipar Office
A TARR tartalomkezelőjében a média- és a dokumentumfeltöltést, a NETipar Office-ban a kártyák és a kommentek csatolmányait kezeli.
A TARR-esettanulmány</Fájlkezelés>
Nagy fájlokkal dolgozik a rendszeretek?
Videó, tervrajz vagy archívum: a megbízható feltöltést és a tárolást a ti rendszeretekbe is beépítjük.
Beszéljünk a projektedrőlNem szükséges kész specifikáció. Elég, ha leírod, mit szeretnétek megoldani.
Ügyfeleink mondták rólunk
Büszkék vagyunk arra, hogy ügyfeleink hosszú távon is elégedettek a közös munkával. Íme néhány visszajelzés, ami igazán számít.
5,0 átlag az 5-ből, 8 Google-értékelés- Megbízható partner Valódi eredmények, hosszú távú együttműködések
- Szakértő csapat Komplex projektek, átlátható folyamatok
- Ügyfélközpontú szemlélet Mindig a közös célokra fókuszálunk
Az alábbi vélemények ügyfeleinktől származó, valós visszajelzések. Ez csak egy kis ízelítő, a teljes listát Google-értékeléseinknél találod.