Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Multipart Upload Bundle Laravel Package

goetas/multipart-upload-bundle

A Symfony bundle for handling chunked, multipart file uploads, letting you stream large files to Amazon S3 using its multipart upload API while integrating with OneupUploaderBundle for resumable, reliable uploads.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor for Laravel, good for Symfony.

  • The package is a Symfony bundle, not a Laravel package. It ships a Bundle class, DI compiler passes, and service definitions wired through Symfony's container — none of which Laravel's service-provider model consumes.
  • It is very likely coupled to symfony/http-foundation for the request/response layer and to oneup/uploader-bundle-style chunked-upload conventions. Laravel's Illuminate\Http\Request, FormRequest, and Storage facade have no interop with these.
  • The genuinely reusable asset is the chunk-assembly domain logic (receive chunk → validate → stage to temp storage → concatenate on final chunk → emit event). That logic is small and portable; the framework scaffolding around it is not.
  • Net: this is not a dependency you add to a Laravel app. It is a reference implementation you port or copy. In a Symfony shop the fit is fine; in a Laravel shop it is effectively a build, not a buy.

Integration feasibility — medium-to-low, with three viable paths.

  1. Port the assembly service into a Laravel package — extract the core classes, rebind staging to a Storage disk, replace Symfony events with Laravel events/facades. Most control, moderate effort.
  2. Sidecar Symfony service — run the bundle in a separate small Symfony app dedicated to uploads. Heavy operational surface for a 21-star dependency; hard to justify.
  3. Do not adopt; use the bundle as a design reference and implement against a Laravel-native alternative or, if on a cloud provider, S3/GCS native multipart upload with presigned URLs, which removes the server-side assembly problem almost entirely.

Technical risk — moderate-to-high, concentrated in the dependency itself.

  • 21 stars, 0 dependents, single maintainer, no commercial backing. This is a bus-factor-of-one package sitting directly on your user-input/file-write path.
  • Recent release activity (2026-06-25) is a positive signal, but it does not establish a security or compatibility track record. MIT license is permissive and fork-friendly — good, because forking should be the assumed end state.
  • Upload code is security-sensitive: path traversal on file names, unbounded temp storage, unauthenticated chunk endpoints, and content-type trust are all live concerns that a low-adoption package is unlikely to have hardened for your threat model.

Key questions to resolve before any commitment.

  • Does it depend on oneup/uploader-bundle, and if so, which protocol (Content-Range vs. proprietary chunk metadata)?
  • What PHP/Symfony version constraints are declared, and do the assembly classes touch Symfony-only helpers (OptionsResolver, EventDispatcher, Filesystem)?
  • Is final assembly streamed or buffered in memory? This single answer determines whether the pattern survives contact with 2 GB+ uploads.
  • Where does temp-chunk lifecycle live — who deletes orphaned chunks, and on what schedule?
  • Test coverage and CI status; any published security advisories; maintainer responsiveness on issues.
  • Is the protocol resumable client-side, or does a dropped connection restart from zero?

Integration Approach

Stack fit. Target Laravel 11/12 on PHP 8.2+. The bundle's framework layer is incompatible; only the domain logic transfers. Keep framework-agnostic Symfony components (symfony/filesystem at most) if useful, drop the rest.

Migration path (recommended: port, don't install).

  • Create an app-local Uploads service or first-party package; lift the chunk-staging and assembly classes.
  • Bind staging to a dedicated Storage disk (uploads/tmp) so temp data is swappable between local and S3.
  • Expose two routes behind auth + rate limiting: POST /uploads/{id}/chunks and POST /uploads/{id}/complete.
  • Emit a UploadCompleted event; hand assembly to a queued job for anything above a size threshold.
  • If the client is browser-side, evaluate pion/laravel-chunk-upload or a Tus/Resumable.js client instead of reimplementing the wire protocol.

Compatibility checks. Confirm PSR usage (PSR-7 vs. HttpFoundation) before porting — PSR-7-based code ports cleanly; HttpFoundation-based code needs a small adapter layer. Verify no reliance on Symfony DI tags or compiler passes, which have no Laravel equivalent and must be rewritten as container bindings.

Sequencing.

  1. Spike: port the assembly service in a branch, run it against three real file sizes (10 MB, 500 MB, 2 GB).
  2. Define the chunk protocol contract and client expectations explicitly.
  3. Wire staging storage, cleanup command, and authorization/quota checks.
  4. Add the queued assembly job and failure handling.
  5. Integrate the client uploader and verify resumability.
  6. Harden: virus scan hook, content-type validation, per-user quota, temp-storage retention.

Steps 1 and 6 are the decision gates — if assembly is memory-bound or temp cleanup is absent, stop and re-plan around object-storage-native multipart.

Operational Impact

Maintenance. Assume you become the maintainer. Once forked, upstream fixes are yours to backport; pin the commit, vendor the code, and record the provenance. Budget a small ongoing allocation rather than treating this as a set-and-forget Composer line.

Support. No vendor, no SLA, negligible community. Escalation path is "read the source." Acceptable for an internal utility, not for a customer-facing upload path without a named internal owner.

Scaling. Chunking trades payload size for request count — you will see many small requests and should plan rate limits, connection reuse, and idempotency on the chunk endpoint. Staging storage grows with concurrency × file size, so object storage is the right default. Assembly is IO/CPU-heavy and belongs on a worker pool, not the web tier. At meaningful scale, presigned-URL multipart upload to S3/GCS is materially cheaper to operate than server-side assembly and should be the baseline you compare against.

Failure modes to design for.

  • Orphaned chunks from abandoned uploads → unbounded storage growth; needs a scheduled uploads:prune command.
  • Assembly failure mid-write → partial/corrupt final object; require atomic write-then-rename or a staging key promotion.
  • Concurrent uploads sharing an upload ID → race conditions on chunk indexing; enforce per-upload locking or single-writer semantics.
  • In-memory assembly → OOM on large files that only appear in production load.
  • Unauthenticated or unthrottled chunk endpoints → trivial storage/bandwidth DoS.
  • Client retry storms on a non-idempotent complete step → duplicate finalization.

Ramp-up. One to two engineer-days to evaluate and spike; roughly one to two weeks to port, integrate, and harden to production quality. Engineers need to read Symfony bundle conventions (DI tags, compiler passes) to understand the source before translating it — a nontrivial context switch for a Laravel-only team.

TPM read. Low score and low opportunity are consistent with what this is: a narrow Symfony utility, single-maintainer, no adoption. For a Symfony shop already doing chunked uploads, it is a reasonable shortcut. For a Laravel shop, it is a reference design, not a dependency — and the honest comparison is against object-storage-native multipart upload, which likely wins on operations, scaling, and risk for the same integration effort.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource