{"adoption": {"forks": 328, "observed_at": "2026-08-28T04:06:26.969993+00:00", "stars": 2213}, "canonical_url": "https://ross.abutalabs.com/products/x-file-storage", "card": {"archived": false, "artifact_type": "library", "description": "一行代码将文件存储到 本地、FTP、SFTP、WebDAV、谷歌云存储、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍云USS、MinIO、 AWS S3、FastDFS、 Azure Blob Storage、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动云 EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的平台。后续即将支持 Samba、NFS", "domain": ["files", "backend", "web-development", "cloud-computing", "developer-tools"], "enriched": true, "function": ["file-upload", "object-storage", "sdk", "developer-tools"], "health_score": 82, "homepage": "https://x-file-storage.xuyanwu.cn/", "language": "Java", "license": "Apache-2.0", "license_family": "permissive", "maturity": "active", "member_repos": ["dromara/x-file-storage"], "name": "dromara/x-file-storage", "platform": ["jvm", "cross-platform"], "pushed_at": "2026-05-07T07:15:41+00:00", "repo": "dromara/x-file-storage", "stars": 2213, "tags": ["file-storage", "abstraction-layer", "s3-compatible", "spring-boot", "multi-cloud", "dromara", "spring"], "topics": ["file-storage", "file-upload", "ftp", "java", "oss", "s3", "sftp", "spring", "webdav", "bos", "kodo", "minio", "uss"], "urls": [], "use_cases": ["upload files to aliyun oss from a spring boot app", "switch between s3 and minio without changing code", "store uploaded files to ftp or webdav in java", "migrate files between cloud storage providers", "unified file storage api for multiple cloud providers", "save files to tencent cos with one line of code"], "what_it_is": "A Java library (part of the Dromara ecosystem) that lets developers store files to local disk, FTP/SFTP, WebDAV, and dozens of cloud object storage platforms (Alibaba OSS, Tencent COS, AWS S3, MinIO, Azure Blob, etc.) with a single line of code. It provides a unified API over heterogeneous storage backends and supports migrating files between platforms.", "when_to_avoid": ["you're not on the JVM (this is a Java library)", "you only ever target a single storage provider and prefer its official SDK directly", "you need streaming or very large-file handling features beyond what the library exposes"], "when_to_choose": ["you're building a Java/Spring application that needs to support multiple or swappable storage backends", "you want one consistent API over local disk, FTP, WebDAV, and S3-compatible clouds", "you need to migrate files between storage platforms"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/x-file-storage", "repo": "dromara/x-file-storage", "role": "main", "score": 59}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:26.969993+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:46:00.780707+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "c9edf492d83650c70e97131d44f1216ebc9c9d3220c978c68bc2608ab5c51d7f", "fetched_at": "2026-08-28T04:06:26.969993+00:00", "kind": "readme", "missing": false, "url": "https://github.com/dromara/x-file-storage"}, {"content_hash": "a700e90233924012462da7a11777e829f1e4a62a58dcd05268b00d0f30b675f0", "fetched_at": "2026-08-29T10:26:21.348317+00:00", "kind": "homepage", "missing": false, "url": "https://x-file-storage.xuyanwu.cn/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 81, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2086, "days_push": 118, "days_rel": 437, "gap_med": null, "n_releases_24m": 1}, "score": 59, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}