mainul/chunk-uploader

Chunked file upload (local storage) for Laravel with server-side merge and optional demo JS.

Maintainers

Package info

github.com/Mainul12501/laravel-chunk-upload

pkg:composer/mainul/chunk-uploader

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-03-09 06:52 UTC

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)

  1. Put this package inside your project (or install via VCS later).
  2. Add to composer.json repositories if needed and run composer 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

  1. Send chunks sequentially to /chunk-uploader/chunk
  2. Call /chunk-uploader/complete to 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)