关于 encore-bucket
为 Encore TypeScript 项目提供对象存储用法指导,适合需要管理文件上传、下载和访问权限的开发者。内容涵盖存储桶、签名 URL 与权限化引用。
主要功能
- 01声明私有或公开存储桶
- 02上传和下载文件
- 03生成临时签名 URL
- 04按权限创建存储桶引用
适用场景
- 01让浏览器通过签名 URL 上传文件
- 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