@beignet/provider-storage-local

中文文档
0.0.65发布于 2026/11/08MITTypeScriptES Module近 30 天下载 1734

Beignet 的本地文件系统存储提供者

中文使用文档
文档目录10 节
  1. 安装
  2. 提供者设置
  3. 直接港口工厂
  4. 私人下载
  5. 磁盘上的文件
  6. 开发工具
  7. 失败行为
  8. 当地测试
  9. 部署说明
  10. 许可证

@beignet/ 提供者- 存储- 本地

运行时间 : Beignet需要Node.js 22.12或更新. Bun是可选的.

[叹息] Beignet是实验性的α软件. 这个 0.0.x 包行为早期 评估,且在框架结算时,API可能在发布之间发生变化.

Beignet 的本地文件系统存储提供商.

提供者安装了应用程序配置 ctx.ports.storage 端口 。 用它来 本地开发、需要耐用文件的测试和小型部署 文件系统支持的对象存储已足够.

createLocalStorageProvider(...) 返回稳定 LocalStorageProvider 类型. LocalStorageConfig 描述其有效的配置; Zod 方案 仍为内部.

安装

bun add @beignet/provider-storage-local @beignet/core

提供者设置

import { createLocalStorageProvider } from "@beignet/provider-storage-local";
import { createServer } from "@beignet/core/server";

const server = await createServer({
  ports: basePorts,
  providers: [createLocalStorageProvider()],
  context: ({ ports }) => ({ ports }),
  routes,
});

环境变量:

变量说明
STORAGE_ROOT写入对象的目录 。 默认为 storage/app。 。 。 .
STORAGE_PUBLIC_BASE_URL可选基址返回 publicUrl(...) 对于公共物体.

beignet doctor --strict 检查安装的本地存储提供者是 登记在册 server/providers.ts。 。 。 .

STORAGE_PUBLIC_BASE_URL 可能是一个绝对的 URL,例如 https://assets.example.com 或相关路径,例如 /storage。 。 。 . 提供者只返回 URL 。 如果您在 Next.js 中使用了相适应路径 应用程序,为公共对象服务 createStorageRoute数字 :

// app/storage/[...key]/route.ts
import { createStorageRoute } from "@beignet/next";
import { getServer } from "@/server";

export const { GET, HEAD } = createStorageRoute(
  async () => (await getServer()).ports.storage,
  {
    basePath: "/storage",
  },
);

直接港口工厂

import { createLocalStorage } from "@beignet/provider-storage-local";

const storage = createLocalStorage({
  root: "storage/app",
  publicBaseUrl: "/storage",
});

提供者提供 ctx.ports.storage,标准贝格网 StoragePort。它没有特定供应商的逃生舱;使用端口 阅读、写作、公共URL和元数据.

一样 StoragePort 与本地文件、内存测试和云对象合作 存储 :

await ctx.ports.storage.put("avatars/user_123.png", avatarBytes, {
  contentType: "image/png",
  visibility: "public",
});

const object = await ctx.ports.storage.get("avatars/user_123.png");
const url = await ctx.ports.storage.publicUrl("avatars/user_123.png");

私人下载

将私有文件存储于 visibility: "private"在经过认证的应用路径中, 解析并授权文件记录,然后调用 createStorageDownloadResponse({ storage, key, fileName }) 从 @beignet/web 或者说 @beignet/next。它流出一个不可取用的附件并返回 null 当对象缺失时,所以路由可以使用其应用错误目录.

storage.temporaryUrl(key, { expiresInSeconds, fileName? }) 验证其投入 返回时 { status: "unsupported" } 不检查存在。 当地 提供者不会发布过期的链接或公开私人文件。 留着 在任何静态文件目录外存储根; 仅公共存储路径 为明确标记的物体服务.

磁盘上的文件

对象如下: root 使用他们的存储密钥。 对象元数据是 存储于 a .beignet-storage-meta 同一根下方的侧车目录.

存储密钥使用共享 @beignet/core/ports 合同:没有空字符串, 控制字符, 空路段, 引导或跟踪 /,后鞭打, 或者说 . 编号 : .. 路径段。 这个 .beignet-storage-meta 路径段是一个 额外的本地提供者限制,因为它存储了侧车元数据.

开发工具

何时 ctx.ports.devtools 已安装, 提供者记录存储 业务 storage 观者. 事件包括操作名称,密钥, 持续时间,对象大小,能见度,以及是否点击了搜索。 对象机构是 从来没有记录.

失败行为

提供者根据需要创建目录并丢弃无效对象密钥, 元数据出错, 文件系统权限失败, 以及读取或写入失败 . 路径 traversal 在触摸文件系统前被拒绝 . 以同一键为对象的变异行为,其根被串用 在一个节点.js进程范围内的顺序,包括通过单独的 本地存储实例. put(...) 在键的变异队列前方 分级输入流, 在短承诺锁外, 溪可能读取上一版本的 同一键而不陷入僵局和排队的身体并非全部消耗临时 磁盘空间. get(...) 返回一发快照:其元数据和正文仍然保存在 同一版本,即使另一个操作在消耗前覆盖了密钥. 检查身体或呼叫 await object.cancel() 关闭未读快照 决了 使用 stat(...) 只读元数据.

当地测试

利用这一供应商进行当地发展或需要持久的融合测试 文档。 使用应用程序的假冒或内存 StoragePort 用于用例测试 只声明存储意图.

部署说明

仅在文件系统持久和共享的部署中使用本地存储 所有需要对象的过程。 无服务器和水平缩放 应用程序通常应当使用 @beignet/provider-storage-s3 或另一个对象商店. 提供者不协调跨进程或主机的同键写作.

许可证

麻省理工学院

版本与发布记录

@beignet/provider-storage-local 共发布 65 个版本,首次发布于 2026/05/27;过去 12 个月发布了 65 个版本。

版本发布日期距今
0.0.65latest2026/11/081 天前
0.0.642026/11/036 天前
0.0.632026/11/028 天前
0.0.622026/11/018 天前
0.0.612026/11/018 天前
0.0.602026/11/018 天前

关于 @beignet/provider-storage-local 的常见问题

@beignet/provider-storage-local 是什么?

Beignet 的本地文件系统存储提供者

如何安装 @beignet/provider-storage-local?

在项目目录运行 npm install @beignet/provider-storage-local,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@beignet/core(>=0.0.3 <1.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@beignet/provider-storage-local 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@beignet/provider-storage-local 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@beignet/provider-storage-local 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22.12.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@beignet/provider-storage-local 可以商用吗?

@beignet/provider-storage-local 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@beignet/provider-storage-local 的下载量有多少?

根据 npm 官方下载统计,@beignet/provider-storage-local 在 2026/10/08 – 2026/11/06 这 30 天内被下载 1,734 次,日均约 58 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@beignet/provider-storage-local 还在维护吗?

最新版本 0.0.65 发布于 2026/11/08(1 天前);至今共发布 65 个版本,其中过去 12 个月发布了 65 个;首次发布于 2026/05/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。