ZH
测试版翻译

@core / storage

1.0.1 ▾
已验证MIT
GitHub

S3 兼容存储桶(R2、S3、MinIO)与本地磁盘的文件存储,支持签名直传

代码11 个文件上下文约 697 个 token扫描通过

应用 .genpmignore 后将被注入的确切目录树。固定于

src/lib/storage/storage.ts只读 · 5b6a9cc
// Proveedor configurado por variables de entorno: `getStorage()` en toda la app; `setStorage()` en tests.
import { backendStorage, diskBackend, memoryBackend } from './memory.ts';
import type { StorageProvider } from './provider.ts';
import { s3Storage } from './s3.ts';

function need(env: Record<string, string | undefined>, name: string): string {
  const v = env[name];
  if (!v) throw new Error(`${name} is not set (see .env.example)`);
  return v;
}

export function storageFromEnv(env: Record<string, string | undefined> = process.env): StorageProvider {
  const req = (name: string) => need(env, name);
  const driver = env.STORAGE_DRIVER ?? 's3';
  if (driver === 's3')
    return s3Storage({
      endpoint: req('STORAGE_ENDPOINT'),
      bucket: req('STORAGE_BUCKET'),
      region: env.STORAGE_REGION,
      accessKeyId: req('STORAGE_ACCESS_KEY_ID'),
      secretAccessKey: req('STORAGE_SECRET_ACCESS_KEY'),
      publicUrl: env.STORAGE_PUBLIC_URL,
    });
  if (driver !== 'local' && driver !== 'memory') throw new Error(`unknown STORAGE_DRIVER: ${driver}`);
  const local = { secret: req('STORAGE_SECRET'), baseUrl: req('STORAGE_PUBLIC_URL') };
  if (driver === 'local') return backendStorage('local', diskBackend(env.STORAGE_LOCAL_DIR ?? '.storage'), local);
  return backendStorage('memory', memoryBackend(), local);
}

let current: StorageProvider | null = null;

export function getStorage(): StorageProvider {
  current ??= storageFromEnv();
  return current;
}

export function setStorage(s: StorageProvider): void {
  current = s;
}

举报 @core/storage

使用 GitHub 登录后才能举报包。