Raypx

@raypx/storage

基于 unstorage 的对象存储抽象。

@raypx/storage 基于 unstorage 提供统一的键值存储抽象,支持本地文件系统和 Redis 两种驱动。

createStorage()

工厂函数,根据配置创建存储实例。

import { createStorage } from "@raypx/storage"

const storage = createStorage()

选项

interface StorageFactoryOptions {
  driver?: "local" | "redis"
  local?: {
    rootDir?: string
  }
  redis?: {
    url?: string
    base?: string
    ttl?: number
  }
}

不传参数时,驱动和配置从环境变量中读取。

API

存储实例提供以下方法:

putObject()

写入对象。

await storage.putObject({
  key: "uploads/avatar.png",
  body: Buffer.from(fileData),
})

await storage.putObject({
  key: "data/config.json",
  body: JSON.stringify(config),
})
参数类型说明
keystring对象键名
bodyUint8Array | Buffer | string对象内容

getObject()

读取对象。对象不存在时抛出错误。

const result = await storage.getObject("uploads/avatar.png")
// result.key: string
// result.body: Buffer

createSignedUploadUrl()

生成上传 URL(仅本地驱动支持)。

const result = await storage.createSignedUploadUrl({
  key: "uploads/avatar.png",
  contentType: "image/png",
})
// result.url: "/api/files/upload?key=uploads%2Favatar.png"
// result.method: "PUT"
// result.headers: { "content-type": "image/png" }

驱动

local(默认)

使用 fs-lite 驱动,将文件存储在本地文件系统中。

const storage = createStorage({ driver: "local" })

redis

使用 Redis 驱动,支持 TTL 过期。Redis 驱动通过动态 import() 加载,仅在需要时引入依赖。

const storage = createStorage({
  driver: "redis",
  redis: {
    url: "redis://localhost:6379",
    base: "raypx:storage",
    ttl: 3600,
  },
})

环境变量

变量类型默认值说明
STORAGE_DRIVER"local" | "redis""local"存储驱动
STORAGE_LOCAL_ROOTstring.storage本地存储根目录
STORAGE_REDIS_URLurl-Redis 连接 URL
STORAGE_REDIS_BASEstring-Redis 键前缀
STORAGE_REDIS_TTL_SECONDSnumber-键过期时间(秒)

类型导出

import type {
  Storage,
  StorageDriver,
  StorageFactoryOptions,
  PutObjectInput,
  PutObjectResult,
  GetObjectResult,
  CreateSignedUploadUrlInput,
  CreateSignedUploadUrlResult,
} from "@raypx/storage"

On this page