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

Qiniu Laravel Storage Laravel Package

zgldh/qiniu-laravel-storage

Qiniu cloud storage driver for Laravel. Integrates Qiniu object storage with Laravel's filesystem, letting you upload, store and serve files through the familiar Storage facade. Supports custom domains, upload tokens and easy configuration via a dedicated filesystem disk.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

zgldh/qiniu-laravel-storage is a thin driver that plugs Qiniu (七牛云) object storage into Laravel's Storage facade. Architecturally it is the right shape: it registers a custom disk (Storage::extend/service provider), delegates the low-level calls to qiniu/php-sdk, and presents the standard Flysystem surface (put, get, delete, exists, url, listContents). For a TPM this matters because adoption is a configuration change, not an application rewrite — filesystem access stays behind Laravel's Storage contract, which preserves our ability to swap backends later.

The important caveat is the era of the architecture. The package is a Flysystem v1 adapter, matching Laravel 5.x–8.x. Laravel 9+ moved to Flysystem v3 with a different adapter interface, and this package has had no release since 2022-03-02. So "architecture fit" is high for legacy Laravel estates and questionable-to-blocking for modern ones without a fork.

Integration feasibility

  • Low code footprint: publish config, add a disk entry in config/filesystems.php, set env credentials (QINIU_ACCESS_KEY, QINIU_SECRET_KEY, QINIU_BUCKET, QINIU_DOMAIN), then use Storage::disk('qiniu') exactly like the local disk.
  • Dependency surface: pulls in qiniu/php-sdk and the Flysystem v1 line. Composer conflicts with projects already on Flysystem 3 are the most likely first blocker.
  • Qiniu-side prerequisites: bucket creation, bound CDN/test domain, CORS for browser-direct uploads, and public-vs-private bucket decision (private buckets require signed URLs, which changes Storage::url() semantics).
  • Verification needed (not assumption): Qiniu is a flat key-value namespace; "directories" are emulated via prefix/delimiter. Listing large prefixes, visibility, and multipart/large-file behavior through the Flysystem shim are the areas to probe in a spike rather than trust.

Technical risk

Risk Severity Notes
Flysystem v1 lock-in High Blocks Laravel 9/10/11 without a maintained fork or replacement adapter
Unmaintained since 2022 High No security patches; single-maintainer, community package
Qiniu SDK drift Medium Token/auth and API changes are absorbed by qiniu/php-sdk, but pinned versions age
Directory/visibility semantics Medium Emulated listing and private-bucket URL signing can surprise app code
Vendor concentration Medium Qiniu account, CDN domain and credentials become deployment-critical

Key questions

  1. What Laravel/PHP versions are in scope today and in 12 months? If any target is Laravel 9+, this package is likely out unless we fork it.
  2. Is China-mainland delivery (or data residency) an actual product requirement, or is this legacy/inherited config?
  3. Public or private buckets — do we need signed/temporary URLs, and does our code rely on Storage::url()?
  4. Do we have large-file or browser-direct upload needs (multipart, upload tokens)?
  5. Who owns the Qiniu account, and is there an exit plan (S3-compatible abstraction) if support lapses?
  6. Is there appetite to vendor/fork, or do we prefer a maintained alternative adapter?

Integration Approach

Stack fit

Good fit where the estate is Laravel 5.x–8.x and the product genuinely serves Chinese users or needs low-latency mainland delivery. In that context the package is the pragmatic "buy/borrow" choice at ~516 stars with an MIT license — no procurement friction, no licensing cost. For Laravel 9+ stacks it should be treated as incompatible by default until a spike proves otherwise; the realistic options are a small internal fork (port the adapter to Flysystem v3) or a maintained alternative Qiniu adapter.

Migration path

  1. Compatibility spike (1–2 days): install in a scratch app on the exact target Laravel/PHP versions, confirm driver registration and basic CRUD.
  2. Staging disk: add qiniu alongside existing disks, mirror a representative asset set, exercise put/get/delete/exists/url, private-bucket signing, and a >100 MB file.
  3. Abstraction hardening: route all asset access through an internal repository/service (or a Storage::disk(config('filesystems.asset_disk')) indirection) so the driver is swappable without touching feature code.
  4. Data migration: backfill existing assets via a batch job that reads from the old disk and writes to Qiniu; rewrite stored paths/URLs; keep dual-read during transition.
  5. Cutover and decommission the old disk after a burn-in window.

Compatibility

Confirm the matrix explicitly before committing: Laravel version ↔ Flysystem major ↔ qiniu/php-sdk version ↔ PHP version. The package's release date makes PHP 8.2/8.3 and Laravel 10/11 support unverified, not assumed. Treat dynamic properties/deprecations and any AdapterInterface mismatch as expected friction.

Sequencing

Spike → decision (adopt / fork / substitute) → staging proof → abstraction layer → asset backfill → cutover. Do not let feature teams code directly against Storage::disk('qiniu'); make the disk name configurable from day one so a later switch is a config change, not a refactor.

Operational Impact

Maintenance

The dominant operational fact: last release 2022-03-02, community-maintained, no security-update cadence. A TPM should plan for ownership — either budget a small internal maintenance commitment (fork pinned in Composer, patch on demand) or accept the risk explicitly with a named owner and a documented exit trigger (e.g., first unpatched CVE or first Laravel upgrade blocker). MIT licensing makes forking legally trivial; the cost is engineering time, not legal.

Support

Community-only, Chinese-language docs and issues. Effective internal support depends on one or two engineers who understand Qiniu's console (bucket, domain, CDN, CORS) as well as the package. That is a bus-factor risk worth naming — plan knowledge transfer and runbook documentation.

Scaling

Scaling is largely Qiniu's problem, not the adapter's: the driver is a thin translation layer. Watch instead for client-side limits — listing very large prefixes through the emulated-directory shim, per-request token generation overhead, batch-operation throughput, and network latency/egress between app servers and Qiniu (especially cross-border). CDN configuration, not the package, determines user-facing performance.

Failure modes

  • Auth/token expiry — misconfigured or rotated keys surface as opaque upload failures; needs health checks and clear error mapping.
  • Domain/CDN misconfiguration — uploads succeed but URLs 404; separate the storage path from the public URL in config.
  • Private-bucket URL signing — cached unsigned URLs leak or fail; ensure url()/temporaryUrl() usage is consistent.
  • Silent batch/delete failures — partial success in bulk operations; wrap with verification and retries.
  • Dependency rot — a routine composer update or Laravel upgrade breaks the disk; pin versions and gate upgrades in CI.
  • Vendor outage/region issues — cross-border latency or Qiniu incidents; needs timeout, retry, and a read-fallback story for critical assets.

Ramp-up

Low for Laravel developers — the Storage facade is familiar and the driver is drop-in. Moderate for the Qiniu console side (buckets, domains, CDN, CORS, signing) and for the migration scripting. Realistically a 1–2 day spike plus a 1–2 week integration/migration effort for a small team, dominated by compatibility verification and asset backfill rather than feature work.

TPM recommendation: adopt for legacy Laravel (≤8) estates with genuine China-delivery needs, behind a storage abstraction and with a named maintainer; treat modern Laravel targets as a fork-or-substitute decision, and set an explicit review trigger around Laravel upgrades and security posture. The low opportunity score (2.27) is consistent with this being a mature, narrow, region-specific niche — high utility inside its lane, limited strategic upside outside it.

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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums