X File Storage 一站式文件存储
Weekly Pick
X File Storage 是一个 Java 开源项目,提供一站式文件存储解决方案,支持多种存储平台(如本地、FTP、SFTP、WebDAV、云存储等),简化文件存储接入流程,支持快速切换存储平台而无需修改代码。
X File Storage 是一个 Java 开源项目,提供一站式文件存储解决方案,支持多种存储平台(如本地、FTP、SFTP、WebDAV、云存储等),简化文件存储接入流程,支持快速切换存储平台而无需修改代码。
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");//其它更多操作
点击 快速入门 查看全部存储平台的使用方法!- 截图: