mainul / chunk-uploader
Chunked file upload (local storage) for Laravel with server-side merge and optional demo JS.
v1.0.0
2026-03-09 06:52 UTC
Requires
- php: ^8.1
- illuminate/support: ^10.0|^11.0|^12.0
This package is auto-updated.
Last update: 2026-03-09 07:14:34 UTC
README
Chunked upload to local storage (no S3). Designed for big files (e.g. 50MB+ videos) with:
- Chunk upload endpoint
- Server-side merge endpoint (streaming merge, low memory)
- Temp chunk cleanup
- Configurable chunk dir + final dir + max chunk size + optional middleware
Install (local dev)
- Put this package inside your project (or install via VCS later).
- Add to
composer.jsonrepositories if needed and runcomposer require remarkhb/chunk-uploader:*.
Publish config (optional)
php artisan vendor:publish --tag=chunk-uploader-config
Routes
This package registers:
- POST
/chunk-uploader/chunk - POST
/chunk-uploader/complete
You can override the route prefix in config.
Storage
Final file is stored to storage/app/public/<final_dir> by default (videos/).
Run once:
php artisan storage:link
Demo JS
A demo chunk uploader is included in resources/js/chunk-uploader-demo.js.
Copy it into your app or publish resources as you wish.
Example client flow
- Send chunks sequentially to
/chunk-uploader/chunk - Call
/chunk-uploader/completeto merge and get final public URL
Security notes
- Validate file types client-side and server-side.
- Consider auth middleware for routes.
- Consider rate limiting.
Config keys
See config/chunk-uploader.php.
Resume + Parallel Upload
This package includes an additional endpoint:
- GET
/{prefix}/status/{upload_id}?total_chunks=N
It returns which chunks have been received so the client can upload only missing chunks. The demo JS implements:
- resume (upload only missing chunks)
- parallel chunk upload with a concurrency limit (default 4)