rustfs 文件存储

关于 RustFS

RustFS 是一个基于 Rust 语言开发的高性能分布式文件存储系统。它兼容亚马逊 S3 云存储服务接口,具有高并发、低延迟、高可靠性等特点,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

官方文档:https://rustfs.com.cn/

Docker 运行部署

生产环境配置

注意指定 access-key 和 secret-key,生产环境需要配置文件目录挂载和数据持久化。

docker run -d --name rustfs \
  -p 9000:9000 -p 9001:9001 \
  docker.1ms.run/rustfs/rustfs:latest

访问验证

安装后使用浏览器访问 http://ip:9000(API 端口)或 http://ip:9001(控制台端口),如果可以访问控制台,则表示 RustFS 已经安装成功。

默认账号

默认账号/密码为 rustfsadmin/rustfsadmin

创建 Bucket

创建存储桶、AK/SK

  • 点击左侧菜单 "Buckets"
  • 点击 "Create Bucket" 按钮
  • 点击创建用户 (AK/SK),这里分配 "readwrite" 权限
RustFS 控制台界面

配置文件

在应用配置文件中添加 RustFS 信息:

直接在 Nacos 对应服务配置文件(如 pigx-upms-biz-dev.yml)中添加以下配置:

file:
  bucketName: s3demo # 上文创建的桶名称
  local:
    enable: false # 关闭本地存储(默认值)
  oss:
    enable: true # v4.4 开启 OSS 上传
    endpoint: http://IP:9000 # RustFS API 端口
    access-key: lengleng # 上文配置的 access key
    secret-key: lengleng # 上文配置的 secret key

代码使用

添加文件系统依赖:

<!--文件系统依赖-->
<dependency>
  <groupId>com.pig4cloud</groupId>
  <artifactId>pigx-common-oss</artifactId>
</dependency>

使用 FileTemplate 进行文件操作:

// 注入 FileTemplate
@Autowired
private FileTemplate template;

// 上传文件
template.putObject("s3demo", fileName, file.getInputStream());

// 获取文件访问链接
String url = template.getObjectURL("s3demo", fileName, 7);

FileTemplate 方法说明

方法名作用参数
createBucket创建 bucketbucketName: bucket 的名称
getAllBuckets获取所有的 bucket
getBucket根据 bucket 名称获取 bucketbucketName: bucket 的名称
removeBucket删除指定的 bucketbucketName: bucket 的名称
getAllObjectsByPrefix根据文件前缀查询文件bucketName: bucket 的名称
prefix: 文件前缀
recursive: 是否递归查询
getObjectURL获取文件的外链bucketName: bucket 的名称
objectName: 文件名称
expires: 过期时间(0-7 天)
getObject获取文件bucketName: bucket 的名称
objectName: 文件名称
putObject上传文件bucketName: bucket 的名称
objectName: 文件名称
stream: 文件流
size: 大小
contextType: 类型
getObjectInfo获取文件信息bucketName: bucket 的名称
objectName: 文件名称
removeObject删除文件bucketName: bucket 的名称
objectName: 文件名称
afterPropertiesSet初始化方法,在设置属性之后会被调用,用于创建 S3 Client 实例