开发与工程 cloudflare-workersr2-storagefile-uploadobject-storagestreamingbackend-development

PinMe Worker R2 存储技能

在 PinMe 部署的 Cloudflare Worker 中安全地使用内置 R2 对象存储处理文件上传、下载与管理。

FollowSkills 评估 · FSRS-2.0
谨慎使用
63/ 100 五分制 3.2 / 5
1 2 3 4 5 6
1信任安全21 / 25 · 4.2/5

该技能详细规定了安全流程:身份验证、授权、大小与媒体策略验证、生成作用域对象键、调用 env.R2 并返回清理后的响应。明确禁止接受客户端提供的对象键、在 D1 中存储文件内容或 base64、返回存储桶名称或内部密钥,并强调使用服务端控制的密钥和 magic bytes 或异步扫描验证敏感格式。未发现恶意或过度权限行为;尽管没有展示完整的用户确认机制,但技能指示在调用处理程序前进行身份验证和授权。扣分原因:缺少对用户确认的明确要求,以及部署平台本身的未知身份。尽管部署平台可能具有外部效果,但技能本身并未引入额外的权限。

2可靠稳定9 / 20 · 2.3/5

技能提供了一致的、类型化的代码示例,涵盖上传、下载、HEAD、删除、列表和 R2 与 D1 协调等关键路径,并包含错误处理和状态码语义。然而,这些示例未经过测试,且未提供任何单元测试或 CI 覆盖该技能本身的证据。对 Cloudflare R2 和 D1 服务的依赖在静态审查中无法验证。扣分原因:缺乏实际执行验证,以及外部服务依赖的不可验证性。

3适用触发12 / 15 · 4.0/5

技能明确定义了受众(PinMe Workers 的开发者)和场景(R2 存储需求),并区分了 R2 与 D1 的适用情形,提供了非适用边界(例如多部分 API 的有条件支持)。触发描述具有语义准确性。然而,由于该技能依赖 PinMe 平台和 Cloudflare 服务,而这两者可能在中国大陆无法访问,因此其环境适配性受限。扣分原因:可能无法从中国大陆访问,且缺少对服务可用性的讨论。

4规范维护11 / 15 · 3.7/5

技能按照清晰的层次组织:描述、运行时契约、安全流程、代码示例和反模式。但缺少已知限制、明确的版本管理与变更日志、维护责任声明以及 FAQ 部分。虽然提供了 LICENSE 和版本信息,但未说明技能本身的版本。扣分原因:文档部分不完整,且缺乏版本/变更历史。

5有效结果6 / 15 · 2.0/5

该技能提供了一套完整的实施蓝图,可直接生成 R2 存储代码,但未验证输出;也缺乏与手动实施或替代方案比较的可量化收益。静态审查无法确认代码是否实际有效,尤其是与特定 PinMe 环境绑定相关的内容。扣分原因:未验证执行结果,且缺少直接可用性的证据。

6证据核验4 / 10 · 2.0/5

存储库包含 CI 工作流和针对 CLI 的测试,但这些测试并不覆盖技能本身。技能中的代码示例未被测试或引用第三方验证。扣分原因:缺乏针对技能关键路径的测试或独立验证。

证据充分度: 评估于 2026年8月7日 审查版本 7822b0501607
使用前请注意
  • 该技能依赖 PinMe 平台和 Cloudflare R2 服务,这些服务在中国大陆可能无法访问,需在部署前进行可用性验证。
  • 技能中的代码示例未经测试,实际部署前建议进行本地单元测试和集成的 R2 行为验证。
  • 静态审查无法确认代码在真实环境中的安全性,例如身份验证和授权实现的正确性。
查看完整评分方法 →

这个 Skill 能做什么,适合哪些场景?

这是一个为 PinMe 平台生成的 Cloudflare Worker 设计的技能,指导开发者使用自动注入的 env.R2 绑定,无需手动配置 Wrangler 或管理凭据。技能提供了完整的运行时合约、安全流程、流式上传下载、元数据操作、R2 与 D1 的协调以及分页等具体代码示例。它强调对象键由服务器控制、身份验证与授权优先、避免常见反模式。该技能适合在 PinMe 项目中开发带有文件存储功能的后端,同时确保安全性和最佳实践。

该技能提供了一套完整的 TypeScript 代码模式和指南,用于在 PinMe 项目的 Cloudflare Worker 中集成 R2 对象存储。具体包括:安全地流式上传文件到 env.R2,支持内容类型和大小限制;流式下载文件,支持 Range 和条件请求;使用 HEAD 读取元数据;删除对象;按用户前缀列出对象并分页;以及协调 R2 与 D1 的数据一致性。同时强调安全流程:身份验证、授权、密钥生成和响应清理,并给出了常见的反模式对照表。

  1. 在 PinMe 项目上构建文件上传功能,用户需要上传图片或 PDF,并希望避免手动配置存储凭据。
  2. 开发一个需要流式下载大文件的应用,支持断点续传(Range 请求)和条件请求。
  3. 实现一个管理界面,需要列出用户上传的文件并分页浏览,同时确保不暴露存储桶结构。
  4. 需要将文件内容存储在 R2,而元数据(如名称、所有者、状态)存储在 D1 数据库中的应用。
  5. 希望遵循安全最佳实践,防止未授权访问和路径遍历攻击的开发者。

这个 Skill 有哪些优点和局限?

优点
  • 无需手动配置 R2 凭据或 Wrangler,绑定已由 PinMe 自动注入。
  • 提供完整的安全流程和反模式清单,帮助避免常见安全问题。
  • 包含流式上传、下载、元数据操作、分页等实用代码示例。
  • 明确指导如何协调 R2 与 D1,管理一致性问题。
  • 适用于多种文件类型和场景,并支持大型文件的多部分上传指导。
局限
  • 技能依赖于 PinMe 平台提供的 R2 绑定,不适用于其他部署环境。
  • 未提供现成的完整实现代码,而是需要开发者根据示例自行编写。
  • 未提及测试策略或如何验证提供的代码,可能缺乏示例的测试覆盖。
  • 对于多部分上传等高级场景,文档仅提供指导,而非完整实现,可能需要更多工作。

如何安装这个 Skill?

该技能包含在 PinMe 仓库(glitternetwork/pinme)中,路径为 skills/pinme-r2/SKILL.md。若要使用整个 PinMe 技能集合,可在感兴趣的仓库中运行安装命令。安装后,技能文件夹应放置在 Agent 能识别的技能目录中。具体步骤未在文档中说明,可能因使用的 Agent 而异。

如何使用这个 Skill?

在 PinMe 项目中,当您需要处理文件上传、下载或管理时,可以直接在提示中描述任务,例如:“在我的 PinMe Worker 中,我需要一个安全的 R2 文件上传端点,支持流式上传和大小限制。”技能将提供详细的代码示例和安全指南。您需要在 Worker 代码中实现这些模式,并确保所有路由都遵循身份验证和授权流程。对于 R2 与 D1 的协调,按照技能中的状态转换步骤进行操作。

常见问题

使用该技能是否需要单独付费?
R2 存储是 PinMe 平台的一部分,其费用取决于 PinMe 的定价计划和 Cloudflare R2 的使用量。技能本身是免费的,但您需要拥有 PinMe 账户并承担相应费用。
我可以在其他平台(如 AWS S3)使用这些代码吗?
不能。代码特意使用 PinMe 注入的 env.R2 绑定和 Cloudflare Worker API,并非通用存储接口。若使用其他平台,需要重写底层存储调用。
如果上传失败或 D1 更新失败,如何处理?
技能提供了状态转换模式:插入 pending 行,上传到 R2,更新为 ready。若上传失败,删除 pending 行或标记失败;若最终 D1 更新失败,删除新上传的对象或保留 pending 状态供补偿作业处理。
技能是否支持所有文件类型?
示例代码中包含了允许的内容类型白名单(仅限图片和 PDF),但文档说明应根据产品需求调整白名单。不支持任意文件类型,需要自行扩展。

同仓库的其他 Skills

均来自 glitternetwork/pinme

相关 Skills