当前位置: 首页 > news >正文

X File Storage 脱离 SpringBoot 独立使用教程:轻量级文件存储解决方案

X File Storage 脱离 SpringBoot 独立使用教程:轻量级文件存储解决方案

【免费下载链接】x-file-storage一行代码将文件存储到 本地、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项目地址: https://gitcode.com/gh_mirrors/xfi/x-file-storage

X File Storage 是一款功能强大的轻量级文件存储工具,支持一行代码将文件存储到本地、FTP、SFTP、WebDAV、阿里云OSS、华为云OBS等多种平台。本教程将详细介绍如何在非SpringBoot环境中独立使用X File Storage,让你快速实现跨平台文件存储功能。

📌 核心优势与适用场景

X File Storage 脱离SpringBoot独立使用时,依然保留了其核心优势:

  • 零框架依赖:纯Java环境即可运行,无需Spring生态支持
  • 多平台兼容:支持20+种存储平台,轻松应对不同存储需求
  • 极简API:一行代码完成文件上传,大幅降低开发复杂度
  • 轻量级设计:核心包体积小,无冗余依赖,适合各种项目场景

特别适合以下开发场景:

  • 传统Java SE项目
  • 非Spring框架的Web项目
  • 工具类应用或桌面程序
  • 对依赖体积有严格要求的微服务

X File Storage 支持多种存储平台的架构设计

📦 快速开始:环境准备

1. 克隆项目代码

首先需要获取X File Storage的源代码:

git clone https://gitcode.com/gh_mirrors/xfi/x-file-storage

2. 引入核心依赖

在你的项目中引入x-file-storage-core核心包,无需Spring相关依赖:

<dependency> <groupId>org.dromara.x-file-storage</groupId> <artifactId>x-file-storage-core</artifactId> <version>2.1.0</version> </dependency>

3. 添加存储平台依赖

根据需要存储的平台,添加对应的依赖。以下是常用平台的依赖配置:

本地存储

无需额外依赖

FTP存储
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.9.0</version> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-extra</artifactId> <version>5.8.22</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.11.1</version> </dependency>
阿里云OSS
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.1</version> </dependency>

更多平台的依赖配置可参考官方文档:docs/快速入门.md

⚙️ 配置与初始化

1. 创建存储平台配置

以FTP存储为例,手动创建存储平台配置:

// 创建配置对象 FileStorageProperties properties = new FileStorageProperties(); // 设置默认存储平台 properties.setDefaultPlatform("ftp-1"); // 配置FTP存储平台 FtpConfig ftp = new FtpConfig(); ftp.setPlatform("ftp-1"); // 存储平台标识 ftp.setHost("192.168.3.100"); // FTP服务器地址 ftp.setPort(2121); // FTP端口 ftp.setUser("root"); // 用户名 ftp.setPassword("123456"); // 密码 ftp.setDomain("ftp://192.168.3.100:2121/"); // 访问域名 ftp.setBasePath("ftp/"); // 基础路径 ftp.setStoragePath("/"); // 存储路径 // 将FTP配置添加到属性中 properties.setFtp(Collections.singletonList(ftp));

2. 初始化FileStorageService

通过构建器模式创建FileStorageService实例:

// 创建并初始化FileStorageService FileStorageService service = FileStorageServiceBuilder .create(properties) // 使用配置 .useDefault() // 使用默认组件 .build(); // 构建服务实例

🚀 核心功能使用示例

文件上传

上传文件到默认存储平台:

// 上传本地文件 FileInfo fileInfo = service.of(new File("D:\\Desktop\\example.png")) .setPath("upload/2023/") // 设置相对路径 .setObjectId("1001") // 关联对象ID(可选) .setObjectType("user") // 关联对象类型(可选) .upload(); // 执行上传 // 输出上传结果 System.out.println("文件URL: " + fileInfo.getUrl()); System.out.println("文件大小: " + fileInfo.getSize()); System.out.println("存储平台: " + fileInfo.getPlatform());

文件存在性检查

// 构造文件信息对象 FileInfo fileInfo = new FileInfo() .setPlatform("ftp-1") .setBasePath("ftp/") .setPath("upload/2023/") .setFilename("example.png"); // 检查文件是否存在 boolean exists = service.exists(fileInfo); System.out.println("文件是否存在: " + exists);

文件下载

// 下载文件为字节数组 byte[] fileBytes = service.download(fileInfo).bytes(); // 下载文件到本地 service.download(fileInfo).toFile(new File("D:\\Downloads\\example.png"));

文件删除

// 删除文件 boolean deleted = service.delete(fileInfo); System.out.println("文件是否删除成功: " + deleted);

🔧 高级配置选项

多平台配置

可以同时配置多个存储平台,根据需要选择使用:

// 配置本地存储 LocalPlusConfig local = new LocalPlusConfig(); local.setPlatform("local-1"); local.setEnableStorage(true); local.setStoragePath("/data/files/"); local.setDomain("http://localhost:8080/files/"); // 添加到配置 properties.setLocalPlus(Collections.singletonList(local)); // 使用指定平台上传 FileInfo fileInfo = service.of(new File("test.txt")) .setPlatform("local-1") // 指定使用本地存储 .upload();

进度监听

上传大文件时可以添加进度监听:

service.of(new File("large-file.zip")) .setProgressListener(progress -> { System.out.println("上传进度: " + progress.getProgress() + "%"); System.out.println("已上传: " + progress.getUploadedSize() + "字节"); System.out.println("总大小: " + progress.getTotalSize() + "字节"); }) .upload();

❓ 常见问题解决

依赖冲突怎么办?

如果遇到依赖冲突(尤其是不同存储平台的SDK之间),可以使用Maven的exclusions排除冲突依赖:

<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.1</version> <exclusions> <exclusion> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </exclusion> </exclusions> </dependency>

如何自定义文件命名规则?

可以通过实现FileNameGenerator接口来自定义文件命名:

service.setFileNameGenerator((fileWrapper, fileStorage) -> { // 生成UUID作为文件名 String uuid = UUID.randomUUID().toString(); // 获取文件扩展名 String ext = FilenameUtils.getExtension(fileWrapper.getOriginalFilename()); return uuid + "." + ext; });

支持的全部存储平台有哪些?

X File Storage支持20+种存储平台,包括:本地存储、FTP、SFTP、WebDAV、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云BOS、又拍云USS、MinIO、AWS S3、FastDFS、Azure Blob Storage等。完整列表可参考docs/存储平台.md

📚 相关资源

  • 官方文档:docs/
  • 核心源代码:x-file-storage-core/src/main/java/org/dromara/x/file/storage/core/
  • 存储平台实现:x-file-storage-core/src/main/java/org/dromara/x/file/storage/core/platform/
  • 示例代码:x-file-storage-tests/x-file-storage-general-test/src/test/java/org/dromara/x/file/storage/test/

通过本教程,你已经掌握了X File Storage脱离SpringBoot独立使用的方法。无论是小型工具还是大型应用,X File Storage都能为你提供简单、高效、可靠的文件存储解决方案。开始尝试使用,体验跨平台文件存储的便捷吧!

【免费下载链接】x-file-storage一行代码将文件存储到 本地、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项目地址: https://gitcode.com/gh_mirrors/xfi/x-file-storage

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/718910/

相关文章:

  • 如何快速掌握二维码修复:QrazyBox的完整使用指南
  • 密盒星云AIGC平台发布会圆满落幕 双维度赋能内容产业高质量发展
  • 大模型微调不再依赖A100!单卡RTX 4090上跑通Qwen2-7B全参数微调(附完整Docker镜像+LoRA配置模板)
  • 示波器实测:给按键并联0.1uF电容,硬件消抖效果到底有多明显?
  • libdxfrw终极指南:高效处理CAD文件的完整C++解决方案
  • 用Pandas处理股票数据:从日期索引、重采样到移动窗口分析实战
  • 微信数据解密实战:PyWxDump项目的合规启示与技术反思
  • 保姆级教程:S32K3xx芯片上三种Secure Boot模式(BSB/ASB/SHE)到底怎么选?
  • CVE-2026-3854 深度解析:一条 git push 命令如何接管全球最大代码平台
  • ShyFox上下文菜单优化:如何启用图标和调整菜单大小的完整教程
  • 鸿蒙超越输入法使用教学
  • C# 13拦截器上线即崩?制造业MES系统踩坑实录:4类元数据污染场景与编译期校验模板
  • 5个关键步骤:用OpenCore Configurator轻松打造完美黑苹果系统
  • 从洛谷P3810到动态逆序对:用CDQ分治解决三维偏序问题的保姆级实战指南
  • 基于Python的剪映自动化开发框架:企业级视频批量处理解决方案
  • VisualSVN Server企业版实战:如何用PowerShell和VDFS实现多地代码库同步与自动化运维
  • HyprPanel模块化系统深度解析:从电池监控到工作区管理的25+核心组件
  • Windows系统-应用问题全面剖析Ⅶ:德承工控机DA-1100在Windows操作系统下[时间同步]设置教程 - Johnny
  • PyMARL扩展开发指南:如何为框架添加新的多智能体算法
  • 联发科G85的红米12C,Root后性能真有提升吗?实测游戏帧率与后台管理变化
  • cornerstone-core实战教程:构建完整的医学图像查看器
  • 北京糖水加盟,岳楼兰新中式糖水是优选之选 - 速递信息
  • 如何在Windows上零安装构建C/C++开发环境:w64devkit终极指南
  • 腾讯面试官问我:“传统 RAG 到底卡在哪?GraphRAG 和 LightRAG 怎么选?”,我震惊:“啥,我刚学RAG,怎么就成传统了”
  • 3种场景下的douyin-downloader实战指南:架构设计与自动化批量采集
  • 终极性能监控实战:Shenyu网关Prometheus指标开发完整指南
  • 7步攻克FlutterUnit崩溃难题:从异常捕获到用户友好提示终极指南
  • YASKAWA JANCD-PC51控制板
  • 2026年西北地区AI搜索优化与企业获客完全指南 - 优质企业观察收录
  • 3步释放C盘空间:FreeMove让Windows目录迁移变得安全又简单