X File Storage 一站式文件存储
X File Storage 是一个 Java 开源项目,提供一站式文件存储解决方案,支持多种存储平台(如本地、FTP、SFTP、WebDAV、云存储等),简化文件存储接入流程,支持快速切换存储平台而无需修改代码。
• Copy the embed code to showcase this product on your website
• Share on X to spread the word about this amazing tool
X File Storage 是一个 Java 开源项目,提供一站式文件存储解决方案,支持多种存储平台(如本地、FTP、SFTP、WebDAV、云存储等),简化文件存储接入流程,支持快速切换存储平台而无需修改代码。
• Copy the embed code to showcase this product on your website
• Share on X to spread the word about this amazing tool
pom.xml 引入本项目,这里默认是 SpringBoot 环境,Solon 环境参考 在 Solon 中使用,其它环境参考 脱离 SpringBoot 单独使用xml<!-- 引入本项目 --><dependency> <groupId>org.dromara.x-file-storage</groupId> <artifactId>x-file-storage-spring</artifactId> <version>2.2.1</version></dependency><!-- 引入 阿里云 OSS SDK,如果使用其它存储平台,就引入对应的 SDK --><dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.1</version></dependency> application.yml 配置文件中添加以下基础配置关于配置文件及 FileInfo 中各种路径(path)的区别,可以参考 常见问题yamldromara: x-file-storage: #文件存储配置 default-platform: aliyun-oss-1 #默认使用的存储平台 aliyun-oss: - platform: aliyun-oss-1 # 存储平台标识 enable-storage: true # 启用存储 access-key: ?? secret-key: ?? end-point: ?? bucket-name: ?? domain: ?? # 访问域名,注意“/”结尾,例如:https://abc.oss-cn-shanghai.aliyuncs.com/ base-path: test/ # 基础路径#### 🔨编码在启动类上加上@EnableFileStorage注解java@EnableFileStorage@SpringBootApplicationpublic class SpringFileStorageTestApplication { public static void main(String[] args) { SpringApplication.run(SpringFileStorageTestApplication.class,args); }} #### ✨开始上传 支持 File、MultipartFile、UploadedFile、byte[]、InputStream、URL、URI、String、HttpServletRequest,大文件会自动分片上传。如果想支持更多方式,请阅读 文件适配器 章节java@RestControllerpublic class FileDetailController { @Autowired private FileStorageService fileStorageService;//注入实列 /** * 上传文件 */ @PostMapping("/upload") public FileInfo upload(MultipartFile file) { //只需要这一行代码即可上传成功 return fileStorageService.of(file).upload(); } /** * 上传文件,成功返回文件 url */ @PostMapping("/upload2") public String upload2(MultipartFile file) { FileInfo fileInfo = fileStorageService.of(file) .setPath("upload/") //保存到相对路径下,为了方便管理,不需要可以不写 .setSaveFilename("image.jpg") //设置保存的文件名,不需要可以不写,会随机生成 .setObjectId("0") //关联对象id,为了方便管理,不需要可以不写 .setObjectType("0") //关联对象类型,为了方便管理,不需要可以不写 .putAttr("role","admin") //保存一些属性,可以在切面、保存上传记录、自定义存储平台等地方获取使用,不需要可以不写 .upload(); //将文件上传到对应地方 return fileInfo == null ? "上传失败!" : fileInfo.getUrl(); } /** * 上传图片,成功返回文件信息 * 图片处理使用的是 https://github.com/coobird/thumbnailator */ @PostMapping("/upload-image") public FileInfo uploadImage(MultipartFile file) { return fileStorageService.of(file) .image(img -> img.size(1000,1000)) //将图片大小调整到 1000*1000 .thumbnail(th -> th.size(200,200)) //再生成一张 200*200 的缩略图 .upload(); } /** * 上传文件到指定存储平台,成功返回文件信息 */ @PostMapping("/upload-platform") public FileInfo uploadPlatform(MultipartFile file) { return fileStorageService.of(file) .setPlatform("aliyun-oss-1") //使用指定的存储平台 .upload(); } /** * 直接读取 HttpServletRequest 中的文件进行上传,成功返回文件信息 * 使用这种方式有些注意事项,请查看文档 基础功能-上传 章节 */ @PostMapping("/upload-request") public FileInfo uploadPlatform(HttpServletRequest request) { return fileStorageService.of(request).upload(); }}#### 🎨其它操作java//手动构造文件信息,可用于其它操作FileInfo fileInfo = new FileInfo() .setPlatform("huawei-obs-1") .setBasePath("test/") .setPath("aa/") .setFilename("image.png") .setThFilename("image.png.min.jpg");//文件是否存在boolean exists = fileStorageService.exists(fileInfo);//下载byte[] bytes = fileStorageService.download(fileInfo).bytes();//删除fileStorageService.delete(fileInfo);//其它更多操作如果将文件记录保存到数据库中,还可以更方便的根据 URL 进行操作了,详情请阅读 保存上传记录 章节java//直接从数据库中获取 FileInfo 对象,更加方便执行其它操作FileInfo fileInfo = fileStorageService.getFileInfoByUrl("https://abc.def.com/test/aa/image.png");//文件是否存在boolean exists = fileStorageService.exists("https://abc.def.com/test/aa/image.png");//下载byte[] bytes = fileStorageService.download("https://abc.def.com/test/aa/image.png").bytes();//删除fileStorageService.delete("https://abc.def.com/test/aa/image.png");//其它更多操作点击 快速入门 查看全部存储平台的使用方法!- 截图:A code-free online store builder to turn views into revenue. Sell digital products, subscriptions, and merch, without fees or hassle.
Convert videos into awesome blog posts.
Fast Image AI instantly transforms your photos into stunning styles like Ghibli, Sketch, and Pixar. Effortlessly control image elements and create amazing effects with just one click.
AI-powered tool that transforms casual photos into professional LinkedIn headshots instantly. No photographer needed—just upload and download.
Crevas unifies Veo 3, Sora 2, Nano Banana and more into one intuitive canvas — so filmmakers can script, prompt, and generate cinematic stories without switching tools or losing consistency.
AI Foto Edit - Text to Image & Image Edit