X File Storage 捐赠至 Dromara 开源组织并发布 2.0.0 版本


【源创会预告】1024 程序员节(的前两天),相约开源PHP办公室,我们一起聊 AI!>>>

logo
原名 X Spring File Storage 现已捐赠至 dromara 开源组织

x-file-storage.dromara.org | x-file-storage.xuyanwu.cn | spring-file-storage.xuyanwu.cn

github star star

📚简介

一行代码将文件存储到本地、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 后,可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务,查看 Alist 支持的存储平台

GitHub:github.com/dromara/x-f…
Gitee:gitee.com/dromara/x-f…

文档1:x-file-storage.dromara.org
文档2:x-file-storage.xuyanwu.cn
文档3:spring-file-storage.xuyanwu.cn


📜更新内容

  • 更改项目名、更改包名、优化项目结构
  • 新增直接读取 HttpServletRequest 的流进行上传,文件不落盘,速度更快
  • 新增支持 Metadata 元数据
  • 优化 ACL 异常处理
  • 优化文件删除逻辑
  • 修复 Amazon S3 上传文件偶现 ResetException 问题
  • 捐赠至 dromara 开源社区

项目依赖的变化

2.0.0 之前的版本

<dependency>
<groupId>cn.xuyanwu</groupId>
<artifactId>spring-file-storage</artifactId>
<version>1.0.3</version>
</dependency>

2.0.0 及以后的版本

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

配置参数的变化

2.0.0 之前的版本

spring:
file-storage: #文件存储配置
default-platform: huawei-obs-1 #默认使用的存储平台
thumbnail-suffix: ".min.jpg" #缩略图后缀,例如【.min.jpg】【.png】
#对应平台的配置写在这里,注意缩进要对齐

2.0.0 及以后的版本

dromara:
x-file-storage: #文件存储配置
default-platform: huawei-obs-1 #默认使用的存储平台
thumbnail-suffix: ".min.jpg" #缩略图后缀,例如【.min.jpg】【.png】
#对应平台的配置写在这里,注意缩进要对齐

包名的变化

2.0.0 之前的版本

cn.xuyanwu.spring.file.storage
cn.xuyanwu.spring.file.storage.spring

2.0.0 及以后的版本

org.dromara.x.file.storage.core
org.dromara.x.file.storage.spring

📦使用

点击 快速入门 查看全部存储平台的使用方法!

🔧 配置

这里以阿里云 OSS 为例,pom.xml 引入本项目,这里默认是 SpringBoot 环境,其它环境参考 脱离 SpringBoot 单独使用

<!-- 引入本项目 -->
<dependency>
<groupId>org.dromara.x-file-storage</groupId>
<artifactId>x-file-storage-spring</artifactId>
<version>2.0.0</version>
</dependency>
<!-- 引入 阿里云 OSS SDK,如果使用其它存储平台,就引入对应的 SDK-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.16.1</version>
</dependency>

application.yml 配置文件中添加以下基础配置

dromara:
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注解

@EnableFileStorage
@SpringBootApplication
public class SpringFileStorageTestApplication {

public static void main(String[] args) {
SpringApplication.run(SpringFileStorageTestApplication.class,args);
}

}

✨开始上传

支持 File、MultipartFile、byte[]、InputStream、URL、URI、String、HttpServletRequest,大文件会自动分片上传。如果想支持更多方式,请阅读 文件适配器 章节

@RestController
public 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();
}
}

🎨其它操作

//手动构造文件信息,可用于其它操作
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 进行操作了,详情请阅读 保存上传记录 章节

//直接从数据库中获取 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");
//其它更多操作

点击 快速入门 查看全部存储平台的使用方法!


🚀Dromara成员项目

TLog liteFlow hutool sa-token hmily Raincat myth cubic maxkey forest jpom sureness easy-es northstar hertzbeat fast-request mendmix koalas-rpc gobrs-async dynamic-tp x-easypdf image-combiner dante-cloud go-view lamp-cloud redis-front electron-egg open-capacity-platform Easy-Trans neutrino-proxy chatgpt zyplayer-doc payment-spring-boot j2eefast data-compare open-giteye-api RuoYi-Vue-Plus RuoYi-Cloud-Plus stream-query sms4j cloudeon hodor test-hub disjob binlog4j yft-design x-file-storage dromara

 

为往圣继绝学,一个人或许能走的更快,但一群人会走的更远。


相關推薦

2023-08-10

X Spring File Storage v1.0.2 已经发布,Spring 文件存储库。 此版本更新内容包括: 修复了华为云 OBS 未加载的问题 此版本支持 本地、FTP、SFTP、WebDAV、谷歌云存储、阿里云OSS、华为云OBS、七牛云Kodo、腾讯云COS、百度云 BOS、又拍

2023-08-09

X Spring File Storage v1.0.1 已经发布,Spring 文件存储库。 此版本更新内容包括: 修复了 MultipartFileWrapperAdapter 无法正确获取文件名的问题 修复了缺少配置文件元数据的问题 此版本支持 本地、FTP、SFTP、WebDAV、谷歌云存储、阿

2023-08-18

X Spring File Storage v1.0.3 已经发布,Spring 文件存储库 此版本更新内容包括: 修复了 FileStorageClientFactory 未自动加载的问题 优化了 HuaweiObsFileStorage 的 ACL 转换方式,使其兼容低版本 SDK 修复了 GoogleCloudStorageFileStorage 的 ACL 转

2022-09-15

面渲染速度; 存储:拥有本地记忆,部分配置项采用 storage 存储本地,提升用户使用体验; 封装:项目进行了详细的工具类封装如:路由、存储、加/解密、文件处理、主题模块、NaiveUI 全局方法、组件等 友情链接 点击

2024-01-18

us/dante-engine(已上传中央库) 后端工程:https://gitee.com/dromara/dante-cloud 前端工程:https://gitee.com/herodotus/dante-cloud-ui 软件生态 Dante Cloud Athena(Dante Cloud 单体版):https://gitee.com/herodotus/dante-cloud-athena Dante&

2023-09-26

提供了强大的基础支持。 开源地址 Gitee:https://gitee.com/dromara/WeMQ Github:https://github.com/dromara/WeMQ Issues & Pull Requests 欢迎提交Issues和Pull Requests,开源大门永远向所有人敞开。 作者介绍 名称:NicholasLD 全栈开发工程师,

2022-07-07

些代码。 兼容性 与以往一样,必须同时升级 Director 和 Storage 守护程序。较早的 File 守护程序应与 13.0 Director 和 Storage 守护程序兼容,因此不需要升级旧的 File 守护程序。 13.0 及以上版本的新目录格式 这个版本的 Bacula 使用

2023-05-04

馈。 https://gitee.com/atzlinux/debian-cn/issues 感谢 感谢各位捐赠人对 《铜豌豆 Linux》项目的积极捐赠 捐赠列表:https://www.atzlinux.com/juanzeng.htm#liebiao 大家的捐赠既是对 铜豌豆 Linux 的认可,也是对 铜豌豆 Linux 支持, 是 铜豌豆 Lin

2023-03-17

真实的开源环境有些脱节了,毕竟除了个人的业余项目和捐赠给基金会、背靠大公司,或者获得大量捐赠的资金充足的开源项目。还有很多用户量巨大,但仍然用爱发电、收到的捐赠少得可怜的开源项目(点名 Log4j2,全球都在

2022-08-02

Dante Cloud 企业级技术中台微服务架构 作者介绍 dromara 开源组织成员,dromara/dante-cloud 作者。 18年企业信息化建设从业人员,熟悉微服务等多种分布式架构,负责过大型企业多种业务领域信息化平台建设建设及企业技术中台

2022-12-23

馈。 https://gitee.com/atzlinux/debian-cn/issues 感谢 感谢各位捐赠人对 《铜豌豆 Linux》项目的积极捐赠 捐赠列表:https://www.atzlinux.com/juanzeng.htm#liebiao 大家的捐赠既是对 铜豌豆 Linux 的认可,也是对 铜豌豆 Linux 支持, 是 铜豌豆 Linu

2023-01-04

2000 stars。 2021 年​ 2021 年 03 月 01 日,Furion 捐赠项目到 dotNET China 组织。 2021 年 03 月 05 日,Furion 在 Gitee 平台获得 3000 stars。 2021 年 04 月 01 日,Furion 所在群 dotNET China 突破 5000 人。 2021 年 04

2022-04-27

在向 CNCF 捐赠 Knative 后,谷歌和 Istio 指导委员会又宣布已将 Istio 项目提交给 CNCF,供其考虑作为一个孵化项目。“这对 Istio 及其社区来说是一个重要的里程碑,我们很高兴能在项目的发展中达到这一步。” Istio 是一个由

2023-10-14

使用技巧 常见问题 参与开发 开源贡献 友情链接 捐赠 反馈 联系方式 《铜豌豆 Linux》11.8.1 版本发布 2023-10-11 《铜豌豆 Linux》操作系统是面向中文用户的桌面操作系统,基于 Debian 制作。 2023-10-07, Debian 官方发