国产开源新秀

在我们开发过程当中,会使用到存文档、图片、视频、音频等,这些都会用到云存储。时下最火的云存储有阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍云USS、MinIO等等。这么多的云存储方案,如果每个都对接一遍,能把人搞死,那么有没有一种统一的方案,只需配置各平台参数,就可以实现对接这么多的云存储平台呢?

图片[1]-国产开源新秀-山海云端论坛

x-file-storage 一行代码就可以把文件存储到本地、FTP、SFTP、WebDAV、阿里云 OSS、华为云 OBS、七牛云 Kodo、腾讯云 COS、百度云 BOS、又拍云 USS、MinIO、 Amazon S3、GoogleCloud Storage、金山云 KS3、美团云 MSS、京东云 OSS、天翼云 OOS、移动 云EOS、沃云 OSS、 网易数帆 NOS、Ucloud US3、青云 QingStor、平安云 OBS、首云 OSS、IBM COS、其它兼容 S3 协议的存储平台。

此外, 通过 WebDAV 连接到 Alist 后,可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务。

🎨️ 快速体验

最新的版本已经更新到 2.0.0,本文也使用此版本作为演示。项目提供了 SpringBoot集成版和脱离 SpringBoot 的两种使用方式。

这里我们默认使用 SpringBoot 环境,毕竟是行业老大。具体步骤如下:1、pom.xml 引入依赖

<dependency> <groupId>org.dromara.x-file-storage</groupId> <artifactId>x-file-storage-spring</artifactId> <version>2.0.0</version></dependency>

2、引入对应的云平台依赖这里引入阿里云OSS为例,其他云储存一

<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.16.1</version></dependency>3、application.yml 配置文件中添加阿里云OSS配置

dromara: x-file-storage: #文件存储配置 default-platform: huawei-obs-1 #默认使用的存储平台    thumbnail-suffix: ".min.jpg" #缩略图后缀,例如【.min.jpg】【.png】 #阿里云OSS配置,注意缩进要对齐 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/ # 基础路径4、在启动类上加上@EnableFileStorage注解

@EnableFileStorage@SpringBootApplicationpublic class SpringFileStorageDemoApplication { public static void main(String[] args) { SpringApplication.run(SpringFileStorageDemoApplication .class,args); }}5、开始上传首先注入 FileStorageService 类。接着使用:

fileStorageService.of(file).upload() 

一行代码完成上传!其中文件类型支持 File、MultipartFile、byte[]、InputStream、URL、URI、String、HttpServletRequest,大文件会自动分片上传

@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/") //保存到相对路径下,为了方便管理,不需要可以不写 .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(); }}从配置到编码整个过程下来不到五分钟,简单快捷。上传的文件可定制化多种操作,如手动构造文件信息、设置图片尺寸,关联文件类型,ACL 访问控制、Metadata 元数据、对文件的上传和删除进行干预等等,操作起来非常方便。

🔥 作者下一步的更新计划

  • 接入存储平台:HDFS、FastDFS、杉岩 OBS、Samba、NFS
  • 大文件手动分片上传(1.0.0 已支持大文件自动分片上传)
  • 复制或移动文件
  • 文件内容预加载
  • 上传无需强制获取 Size
  • 新增 Access 模块,尝试通过 HTTP、FTP、WebDAV 等协议对外提供接口,方便其它程序使用

最近有在做文件存储这方面项目的宝子,不妨拿来用一用,支持一下国产开源项目,只有更多的人参与进来了,大家一起参与维护开发,项目会越来越优秀!

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容