mcpField
E
encore-bucket

encore-bucket

github.com/encoredev云与 DevOps30429 次安装2 天前更新
代码仓库

关于 encore-bucket

为 Encore TypeScript 项目提供对象存储用法指导,适合需要管理文件上传、下载和访问权限的开发者。内容涵盖存储桶、签名 URL 与权限化引用。

主要功能

  1. 01声明私有或公开存储桶
  2. 02上传和下载文件
  3. 03生成临时签名 URL
  4. 04按权限创建存储桶引用

适用场景

  1. 01让浏览器通过签名 URL 上传文件
  2. 02向其他代码传递受限存储桶访问权限

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/encoredev/skills --skill encore-bucket

安装后在 Claude Code 中输入/encore-bucket确认已加载。

详细介绍

Encore 对象存储

使用说明

Bucket 是用于存储文件的逻辑存储区。Encore 会配置底层对象存储(在 AWS 上使用 S3,在 GCP 上使用 GCS,本地环境中使用内存存储)。请在包级别声明存储桶。

import { Bucket } from "encore.dev/storage/objects";

// Private bucket (default)
export const uploads = new Bucket("user-uploads", {
  versioned: false,  // Set to true to keep multiple versions
});

// Public bucket — files accessible via public URL
export const publicAssets = new Bucket("public-assets", {
  public: true,
  versioned: false,
});

操作

// Upload
const attrs = await uploads.upload("path/to/file.jpg", buffer, {
  contentType: "image/jpeg",
});

// Download
const data = await uploads.download("path/to/file.jpg");

// Existence check
const exists = await uploads.exists("path/to/file.jpg");

// Attributes (size, content type, ETag)
const meta = await uploads.attrs("path/to/file.jpg");

// Delete
await uploads.remove("path/to/file.jpg");

// List
for await (const entry of uploads.list({})) {
  console.log(entry.key, entry.size);
}

// Public URL (only for public buckets)
const url = publicAssets.publicUrl("image.jpg");

签名 URL

生成临时 URL,让客户端直接上传或下载,而无需经过你的服务:

const uploadUrl = await uploads.signedUploadUrl("user-uploads/avatar.jpg", { ttl: 7200 });
const downloadUrl = await uploads.signedDownloadUrl("documents/report.pdf", { ttl: 7200 });

存储桶引用

通过特定的权限集,将存储桶访问权限传递给其他代码:

import { Uploader, Downloader } from "encore.dev/storage/objects";

const uploaderRef = uploads.ref<Uploader>();
const downloaderRef = uploads.ref<Downloader>();

// Permission types: Downloader, Uploader, Lister, Attrser, Remover,
// SignedDownloader, SignedUploader, ReadWriter

错误

  • ObjectNotFound — 对象不存在
  • PreconditionFailed — 上传前置条件未满足(例如 setIfNotExists)
  • ObjectsError — 基础错误类型

指南

  • 在包级别声明存储桶。
  • 默认使用私有存储桶;仅当资源需要允许未经身份验证的用户下载时,才启用 public: true。
  • 使用签名 URL 进行浏览器上传或下载,而不是通过服务流式传输。
  • 传递访问权限给辅助函数时使用存储桶引用——它们会在类型系统中体现权限约定。

评论

支持 Markdown