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

Flysystem Qiniu Laravel Package

liz/flysystem-qiniu

liz/flysystem-qiniu is a Flysystem adapter for Qiniu cloud storage. It lets Laravel and PHP applications use Qiniu as a filesystem disk, so you can upload, read, and delete files through Flysystem's unified API with minimal configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a thin Flysystem adapter that delegates object operations to qiniu/php-sdk and plugs into Laravel's Storage facade through the standard custom-driver pattern (Storage::extend / a filesystem service provider). Architecturally this is the right shape: it keeps Qiniu-specific code at the edge, leaves application code written against Illuminate\Support\Facades\Storage, and makes the backend swappable via disk configuration. Conceptually it fits a Laravel codebase with no structural changes. v1.23 does not change this — the release note ("添加php8.0使用" / "add PHP 8.0 support") describes a compatibility edit, not an architectural one, and there is no evidence the adapter contract was touched.

The real issue is version alignment, not design — and v1.23 does not address it. PHP 8.0 support is a runtime-version constraint fix. The blocking problem is Flysystem major version. Flysystem 1 → 2 → 3 was a breaking rewrite of the adapter contract (AdapterInterface → FilesystemAdapter, typed Config/Visibility objects, changed method signatures, DirectoryListing return types). A four-year-dormant adapter receiving a single PHP-version patch is still almost certainly v1-era, possibly partial v2. Laravel 9/10/11 pin league/flysystem ^3, so composer require will either hard-conflict or require pinning the framework back — which is not a viable long-term position. Crucially, PHP 8.0 support is orthogonal to Flysystem 3 support; satisfying one does not advance the other. Note also that PHP 8.0 itself reached end-of-life in November 2023, so this release targets a runtime that is already unsupported upstream — a lagging indicator rather than a modernization signal.

Integration feasibility. Feasible, but still only as fork-and-port rather than as a dependency. The v1.23 patch makes the artifact marginally more installable on PHP 8.0 environments, but installability was never the binding constraint — the Flysystem contract was. Porting to Flysystem 3 remains bounded work: one class implementing FilesystemAdapter plus normalization of exceptions, visibility, and listing — realistically 3–5 engineer-days including tests. The harder, unbounded work is the semantic gap between S3-style filesystem abstractions and Qiniu Kodo: no true directories (prefix emulation), bucket-level rather than object-level ACLs, paginated/truncated listContents, per-request upload tokens, and signed download URLs for private buckets.

Technical risk.

  • Abandonment — materially unchanged, slightly qualified. v1.23 is the first release in over four years, but it is a one-line-scope compatibility patch, not a maintenance resumption. There is still no release cadence, no visible test suite, no security-patch or CVE-response track record, and 4 stars / 0 dependents. A single patch after four years is weak evidence of ongoing stewardship; treat it as a data point, not a trend.
  • Provenance: the repo owner still does not match the liz/ vendor namespace, strongly suggesting a republished personal fork. License and upstream attribution must be verified before any commercial use; a missing or copied license is a blocker, not a footnote. v1.23 provides no clarification here.
  • Semantic lossiness: per-object visibility, atomic directory delete, and url() for private buckets are all likely to behave differently than callers expect.
  • Silent correctness bugs: list pagination truncation and key-encoding edge cases (Unicode/CJK filenames, spaces) are the classic failure mode in hand-rolled Qiniu adapters, and there is no visible test suite. A PHP-version patch touching no test surface does nothing to reduce this risk.
  • Scope ambiguity: the release note does not say whether v1.23 widened a composer.json php constraint only, or also bumped qiniu/php-sdk / Flysystem. That distinction determines whether this is a no-op for our purposes.

Key questions.

  1. Which Flysystem major does the adapter target, and what is the actual composer.json constraint after v1.23?
  2. What exactly changed in v1.23 — composer.json only, or code? Provide the diff, not the changelog line.
  3. What License, and is there an identifiable upstream project this was forked from?
  4. Does it support private buckets with expiring download tokens, or only public-URL access?
  5. How are multipart/large uploads and resumable transfers handled?
  6. Is listContents paginated to completion, and does it honor the deep flag?
  7. Which qiniu/php-sdk version, and is it itself current?
  8. Does v1.23 claim PHP 8.1/8.2/8.3, or 8.0 only? An 8.0-only claim still forces a downgrade on any modern Laravel target.

Integration Approach

Stack fit. Marginally improved at the low end, unchanged at the high end. v1.23 makes the package viable on PHP 8.0 / Laravel ≤8 / Flysystem 1 — a stack that is itself approaching or past end-of-life. It remains poor-to-unusable for Laravel 9+ without modification, because the Flysystem 3 contract gap is untouched. Qiniu Kodo itself is a solid, cost-effective, China-region-optimized object store with strong CDN and image-processing (fop) integration — the storage choice is defensible even where this package is not.

Options, ranked.

  1. S3-compatible path (preferred if verified): Qiniu exposes an S3-compatible interface for Kodo. If it covers the operations you need (put/get/delete/list, presigned URLs), use league/flysystem-aws-s3-v3 — a first-party-maintained adapter — and treat Qiniu as a commodity S3 target. Zero custom code to own. Requires a verification spike; compatibility is partial and should be tested, not assumed. Unaffected by v1.23.
  2. Fork and port to Flysystem 3: vendor the code in-house under a clear license header, port the adapter class, add a contract test suite, publish internally. Best option when you need Qiniu-specific features (fop pipelines, private-bucket token URLs) that S3 compatibility won't expose. v1.23 slightly improves the starting point (PHP 8.0 baseline) but does not reduce the port effort.
  3. Write a minimal in-house adapter: ~300–500 LOC against qiniu/php-sdk. Justified only if the fork's internals prove untrustworthy.
  4. Adopt as-is: acceptable only for a greenfield Laravel ≤8 service targeting PHP 8.0 on a hard freeze with an accepted end-of-life date. v1.23 widens this window by exactly one PHP minor version — it does not create a new viable path for a modern stack.

Migration path. The critical enabler is the disk-name indirection: application code should only ever reference Storage::disk('assets'). If that holds, swapping the underlying driver is a config and service-provider change, not an application refactor. For existing data, plan a parallel-run: write to both old and new backends behind a feature flag, backfill historical objects with a one-off job, verify checksums and key parity, then cut over reads and retire the old path.

Compatibility matrix to nail down before committing: Laravel version × PHP version × league/flysystem major × qiniu/php-sdk version × Qiniu region/zone config. v1.23 fills in one cell — PHP 8.0 — and leaves the Flysystem and SDK cells blank. A single unsupported cell still invalidates the whole option; the most likely remaining blockers are Flysystem 3 and any PHP version above 8.0.

Sequencing. (1) License and provenance audit, diff against upstream. (2) Pull the v1.23 diff and confirm whether it is constraint-only or code. (3) Composer spike in a scratch app on the target Laravel version — a 30-minute experiment that de-risks everything downstream, and the fastest way to falsify any hope that v1.23 unblocked us. (4) Build the adapter contract test suite first (put/get/exists/delete/list/url/visibility/large file/CJK keys/private bucket). (5) Decide buy-vs-build based on the spike. (6) Parallel-run and backfill. (7) Cutover behind the stable disk name.

Operational Impact

Maintenance. The dominant cost is that you inherit ownership. Budget roughly 1–2 engineer-days per quarter for SDK bumps, Qiniu API drift, and PHP/Laravel compatibility — and a larger one-off hit whenever Flysystem ships its next major. v1.23 is a reminder that upstream maintenance is sporadic and reactive: it arrived roughly three years after PHP 8.0 shipped and does not extend to PHP 8.1+. Do not plan against its cadence. Compare against effectively zero for a first-party S3 adapter, which remains the strongest argument for option 1.

Support. Still a single maintainer, no SLA, no release cadence, issues likely in Chinese and possibly unanswered. The v1.23 release note is a bare sentence with no linked PR, no test evidence, and no migration guidance — which is itself a signal about support quality. Qiniu's own documentation is thorough but primarily Chinese-language, so the real support surface is your team's Qiniu fluency, not the package. Zero dependents means no ecosystem: no Stack Overflow corpus, no third-party fixes to lean on, no signal that anyone else has hit your bug.

Scaling. The adapter is stateless and adds negligible overhead — scale is a Qiniu property, not a package property. The practical ceilings are Qiniu API QPS quotas per bucket, upload/download token generation rate, and PHP's HTTP client concurrency. High-concurrency write paths should go through a queue with bounded workers rather than synchronous request-time uploads. Large objects need multipart upload and should never be streamed through a web request. No change from v1.23.

Failure modes to instrument.

  • Expired or malformed upload/download tokens (401-class Qiniu errors) — usually a clock-skew or TTL misconfiguration.
  • listContents returning a truncated page and callers treating it as complete.
  • Prefix-delete races where a "directory delete" partially succeeds.
  • Visibility calls silently no-oping because the bucket ACL is fixed.
  • Multipart upload timeouts leaving orphaned parts and billable storage.
  • CDN cache staleness after overwrite — a correctness problem unique to Qiniu's CDN-fronted model, invisible at the Flysystem layer.
  • New: version drift between the package and the framework on partial upgrades — an environment that satisfies the v1.23 PHP constraint but not the Flysystem constraint will fail at resolve time or, worse, autoload a stale adapter against a newer contract. Pin explicitly and assert the resolved Flysystem major in CI.

Ramp-up. A Laravel developer is productive against the Storage facade in hours regardless of backend — that is the abstraction doing its job. Understanding the fork's internals (needed for any bug fix) is a few days. Genuine Qiniu operational fluency — private buckets, token signing, CDN invalidation, fop pipelines — is the long pole and should be treated as a distinct skill to staff for, independent of this package decision. v1.23 does not shorten any of this.

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.
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
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