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:object | Client | 创建一个连接客户端对象 |
| createAccessKey | 方法 | connConf:object,accessKeyConf:object | accessKey:object | 创建访问密钥 |
| deleteAccessKey | 方法 | connConf:object,accessKeyConf:object | bool | 删除访问密钥 |
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?:string | bool | 创建一个新的存储桶 |
| bucketExists | 方法 | bucketName:string | bool | 检查存储桶是否存在 |
| removeBucket | 方法 | bucketName:string | bool | 删除一个存储桶 |
| listBuckets | 方法 | array | 列出所有存储桶 | |
| putObject | 方法 | bucketName:string objectName:string, filePath:string, contentType?:object | Object | 上传一个文件到存储桶 |
| getObject | 方法 | bucketName:string, objectName:string, filePath:string | bool | 从存储桶下载一个对象到本地文件 |
| removeObject | 方法 | bucketName:string, objectName:string | bool | 删除存储桶中的一个对象 |
| listObjects | 方法 | bucketName:string, prefix?:string, recursive?:bool | array | 列出存储桶中的对象 |
| presignedGetObject | 方法 | bucketName:string, objectName:string, expiresIn?:int | string | 生成一个用于下载对象的预签名 URL |
| presignedPutObject | 方法 | bucketName:string, objectName:string, expiresIn?:int | string | 生成一个用于上传对象的预签名 URL |
| presignedHeadObject | 方法 | bucketName:string, objectName:string, expiresIn?:int | string | 生成一个用于 HEAD 请求的预签名 URL |
| getBucketPolicy | 方法 | bucketName:string | string | 获取存储桶策略 |
| setBucketPolicy | 方法 | bucketName:string,policy:string | bool | 设置存储桶策略 |
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: 本地文件路径,或者文件流 buffercontentType: 内容类型(可选,默认为 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)
