RustFS

RustFS

RustFS 是一个基于 S3 协议的文件系统模块,兼容 Amazon S3 和 MinIO 等对象存储服务。

安装和使用

在 Vino 项目中,可以通过以下方式使用 RustFS 模块:

import rustfs from 'rustfs'

// 创建客户端
const client = rustfs.open({
    endpoint: 'play.min.io',
    accessKey: 'Q3AM3UQ867SPQQA43P2F',
    secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
    region: 'us-east-1'
})

// 创建存储桶
client.makeBucket('my-bucket')

// 上传文件
client.putObject('my-bucket', 'my-object', '/path/to/local/file.txt')

// 生成下载链接
const url = client.presignedGetObject('my-bucket', 'my-object', 3600) // 1小时有效

RustFS 的 API

名称类型参数返回值说明
open方法config:objectClient创建一个连接客户端对象
createAccessKey方法connConf:object,accessKeyConf:objectaccessKey:object创建访问密钥
deleteAccessKey方法connConf:object,accessKeyConf:objectbool删除访问密钥

open

创建一个新的 S3 客户端实例。

参数

  • config: 配置对象
    • endpoint: S3 服务地址
    • accessKey: 访问密钥 ID
    • secretKey: 秘密访问密钥
    • region: 区域信息(可选,默认为 us-east-1)

示例

const client = fs.open({
    endpoint: 'play.min.io',
    accessKey: 'your-access-key',
    secretKey: 'your-secret-key',
    region: 'us-east-1'
})

createAccessKey

用于在 RustFS 服务端创建一个新的访问密钥(AccessKey)。 该方法通常用于多用户环境中,为不同应用或用户创建独立的访问凭证。

参数

  • connConf: 连接 RustFS 管理端的配置对象

    • endPoint: RustFS 管理 API 地址(非 S3 endpoint)
    • username: 管理员用户名
    • password: 管理员密码
  • accessKeyConf: 访问密钥配置对象

    • accessKey: (可选)要创建的 AccessKey ID,长度需要小于20位
    • secretKey: (可选)SecretKey,长度需要小于40位
    • name: 该密钥的名称(用于标识用途)
    • description: 描述信息
    • expiration: 密钥的到期时间(ISO 时间字符串)

返回值

accessKey: object 返回新创建的 AccessKey 的详细信息,包括 key、过期时间等。

示例

import rustfs from 'rustfs';

let res = rustfs.createAccessKey(
    {
        endPoint: "http://192.168.3.160:9001",
        username: "rustfsadmin",
        password: "rustfsadmin"
    },
    {
        accessKey: "mmaaaccccccbbbbbbAUG",
        secretKey: "Rz3AcVmUYkluFJ8KEtvyNoQbWDB07eqIX52s6ndM",
        name: "test10",
        description: "sadaa",
        expiration: "2025-11-28T07:46:00.000Z",
    }
);

console.log("res:", res);

deleteAccessKey

删除一个已存在的访问密钥(AccessKey)。 通常用于清理废弃、不再使用或已过期的访问凭证。

参数

  • connConf: 管理端连接配置

    • endPoint: RustFS 管理 API 地址
    • username: 管理员账号
    • password: 管理员密码
  • accessKeyConf: 访问密钥信息

    • accessKey: 需要删除的 AccessKey ID

返回值

bool 删除成功返回 true,失败返回 false

示例

import rustfs from 'rustfs';

let result = rustfs.deleteAccessKey(
    {
        endPoint: "http://192.168.3.160:9101",
        username: "rustfsadmin",
        password: "rustfsadmin"
    },
    {
        accessKey: "mmaaaccccccbbbbbbAUG",
    }
);

console.log("deleteAccessKey:", result);

Client

RustFS 模块中的 Client 对象提供了与 S3 服务进行交互的 API。 具体的API如下:

名称类型参数返回值说明
makeBucket方法bucketName:string,region?:stringbool创建一个新的存储桶
bucketExists方法bucketName:stringbool检查存储桶是否存在
removeBucket方法bucketName:stringbool删除一个存储桶
listBuckets方法array列出所有存储桶
putObject方法bucketName:string objectName:string, filePath:string, contentType?:objectObject上传一个文件到存储桶
getObject方法bucketName:string, objectName:string, filePath:stringbool从存储桶下载一个对象到本地文件
removeObject方法bucketName:string, objectName:stringbool删除存储桶中的一个对象
listObjects方法bucketName:string, prefix?:string, recursive?:boolarray列出存储桶中的对象
presignedGetObject方法bucketName:string, objectName:string, expiresIn?:intstring生成一个用于下载对象的预签名 URL
presignedPutObject方法bucketName:string, objectName:string, expiresIn?:intstring生成一个用于上传对象的预签名 URL
presignedHeadObject方法bucketName:string, objectName:string, expiresIn?:intstring生成一个用于 HEAD 请求的预签名 URL
getBucketPolicy方法bucketName:stringstring获取存储桶策略
setBucketPolicy方法bucketName:string,policy:stringbool设置存储桶策略

makeBucket

创建一个新的存储桶。

参数

  • bucketName: 存储桶名称
  • region: 区域信息(可选,默认为 us-east-1)

返回值

  • boolean 成功返回 true

示例

client.makeBucket('my-new-bucket')
// 或者指定区域
client.makeBucket('my-new-bucket', 'us-west-1')

bucketExists

检查存储桶是否存在。

参数

  • bucketName: 存储桶名称

返回值

  • boolean 存在返回 true,否则返回 false

示例

const exists = client.bucketExists('my-bucket')
console.log('Bucket exists:', exists)

removeBucket

删除一个存储桶。

参数

  • bucketName: 存储桶名称

返回值

  • boolean 成功返回 true

示例

client.removeBucket('my-bucket-to-delete')

listBuckets

列出所有存储桶。

返回值

  • Array 包含存储桶信息的数组,每个元素包含 name 和 creationDate 字段

示例

const buckets = client.listBuckets()
buckets.forEach(bucket => {
    console.log('Bucket name:', bucket.name)
    console.log('Creation date:', bucket.creationDate)
})

putObject

上传一个文件到存储桶。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称(在存储桶中的路径)
  • filePath:string | file:buffer: 本地文件路径,或者文件流 buffer
  • contentType: 内容类型(可选,默认为 application/octet-stream)

返回值

  • Object 包含上传结果信息的对象,包括 bucket、key、etag 和 size

示例

通过本地路径上传一个文件

const result = client.putObject('my-bucket', 'images/avatar.png', '/local/path/avatar.png', 'image/png')
console.log('Upload result:', result)

通过文件流上传一个文件

import {fs} from "core"
import rustfs from 'rustfs';

let conf = {
    endpoint: 'http://192.168.3.160:9101',
    accessKey: 'test',
    secretKey: 'test1111',
    secure: true
};

let f = fs.openFile("/Users/vino/code/1.pdf")
let buffer = f.read()

// 创建客户端
const client = rustfs.open(conf);
const result = client.putObject('my-bucket', 'testFile/1.pdf', buffer)
console.log('Upload result:', result)

getObject

从存储桶下载一个对象到本地文件。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称
  • filePath: 本地保存文件路径

返回值

  • Boolean 成功返回 true

示例

client.getObject('my-bucket', 'images/avatar.png', '/local/download/path/avatar.png')

removeObject

删除存储桶中的一个对象。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称

返回值

  • Boolean 成功返回 true

示例

client.removeObject('my-bucket', 'images/avatar.png')

listObjects

列出存储桶中的对象。

参数

  • bucketName: 存储桶名称
  • prefix: 前缀过滤(可选)
  • recursive: 是否递归列出(可选,默认为 true)

返回值

  • Array 包含对象信息的数组,每个元素包含 key、size、etag 和 lastModified 字段

示例

// 列出所有对象
const objects = client.listObjects('my-bucket')

// 列出指定前缀的对象
const objectsWithPrefix = client.listObjects('my-bucket', 'images/')

// 非递归列出
const topLevelObjects = client.listObjects('my-bucket', '', false)

presignedGetObject

生成一个用于下载对象的预签名 URL。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称
  • expiresIn: 过期时间(秒,默认为 604800,即7天)

返回值

  • String 预签名的 GET URL

示例

// 生成1小时后过期的URL
const url = client.presignedGetObject('my-bucket', 'images/avatar.png', 3600)
console.log('Download URL:', url)

presignedPutObject

生成一个用于上传对象的预签名 URL。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称
  • expiresIn: 过期时间(秒,默认为 604800,即7天)

返回值

  • String 预签名的 PUT URL

示例

// 生成1小时后过期的URL
const url = client.presignedPutObject('my-bucket', 'uploads/new-file.txt', 3600)
console.log('Upload URL:', url)

presignedHeadObject

生成一个用于 HEAD 请求的预签名 URL。

参数

  • bucketName: 存储桶名称
  • objectName: 对象名称
  • expiresIn: 过期时间(秒,默认为 604800,即7天)

返回值

  • String 预签名的 HEAD URL

示例

// 生成1小时后过期的URL
const url = client.presignedHeadObject('my-bucket', 'images/avatar.png', 3600)
console.log('Head URL:', url)

getBucketPolicy

获取存储桶策略。

参数

  • bucketName: 存储桶名称

返回值

  • String 存储桶策略(JSON格式字符串)

示例

const policy = client.getBucketPolicy('my-bucket')
console.log('Bucket policy:', policy)

setBucketPolicy

设置存储桶策略。

参数

  • bucketName: 存储桶名称
  • policy: 存储桶策略(JSON格式字符串)

返回值

  • Boolean 成功返回 true

示例

const policy = '{"Version":"2012-10-17","Statement":[{"Sid":"PublicRead","Effect":"Allow","Principal":"*","Action":"s3:GetObject","Resource":"arn:aws:s3:::my-bucket/*"}]}'
client.setBucketPolicy('my-bucket', policy)
更新时间 3/18/2026, 7:21:33 PM