国产开源新秀,存储文件只需一行代码!

墨林一码农 2023-12-24 08:40:04



墨林码农专注分享开源项目, 精选开源社区技术干货,分享Github、Gitee上有趣、有价值的项目,一起学习,一起成长。

前言

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

简介

今天小编就为大家带来一款国产开源新秀:x-file-storage,它就能帮我们实现这些功能!存储文件只需一行代码!!!

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 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 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 元数据、对文件的上传和删除进行干预等等,操作起来非常方便。

结束语

几个简单的字符,就能创造出欢乐,

几个简单的号码,便能写出奇迹。

一个键盘,就能畅游世界,

一根网线,便能知晓天下。

创作不易,感谢大家的支持。后续也会分享更多的干货和技术资讯,您的阅读就是对小编的支持,再次感谢各位老铁!

7 阅读:2047
评论列表

墨林一码农

简介:感谢大家的关注