You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地开发:Cloudflare Worker(HonoJS)如何访问本地R2文件?

本地开发Cloudflare Worker + R2的文件访问与模拟方案

一、本地访问模拟R2存储的文件

有两种可靠方式:

  • 通过Worker路由代理访问(推荐):利用Hono编写路由,直接从本地模拟的R2桶中读取文件并返回,完全贴合生产环境的访问逻辑。示例代码:

    import { Hono } from 'hono'
    
    const app = new Hono()
    // 注意:这里的MY_R2_BUCKET要和wrangler.toml里的绑定名称一致
    const R2_BUCKET = app.env.MY_R2_BUCKET
    
    // 本地开发时的文件访问路由,和生产子域名的路径逻辑对齐
    app.get('/:filename', async (c) => {
      const filename = c.req.param('filename')
      const object = await R2_BUCKET.get(filename)
      
      if (!object) return c.notFound()
    
      return new Response(object.body, {
        headers: {
          'Content-Type': object.httpMetadata?.contentType || 'application/octet-stream',
          'Content-Length': object.size.toString()
        }
      })
    })
    
    export default app
    

    启动Worker后,访问http://localhost:8787/你的文件名就能获取本地存储的文件。

  • 直接读取本地文件系统(临时用):文件默认存在.wrangler/state/v3/r2/你的桶名/Blob目录下(路径可能随Wrangler版本微调),可以直接打开查看,但这种方式没法模拟生产的请求流程,仅适合临时验证文件是否上传成功。

二、模拟生产R2子域名的本地URL

可以通过两种方式实现和生产一致的子域名访问体验:

  • 自定义Wrangler启动域名:启动本地开发时添加--hostname参数,比如:

    npm run dev -- --hostname r2.localhost
    

    此时访问http://r2.localhost/你的文件名就对应生产环境的R2子域名访问,配合上面的路由逻辑,完全对齐生产行为。

  • 本地反向代理(更灵活):修改本地hosts文件,将自定义子域名(比如r2.myapp.local)指向127.0.0.1,然后用Caddy/Nginx做反向代理,将子域名请求转发到Worker的文件路由。以Caddy为例,配置文件如下:

    r2.myapp.local {
      reverse_proxy localhost:8787
    }
    

    启动Caddy后,访问http://r2.myapp.local/你的文件名就和生产子域名的访问逻辑完全一致。

三、R2交互模拟的最佳实践

  • 依赖Wrangler自带模拟:Wrangler默认的本地R2模拟已经足够日常开发,它完全隔离真实生产桶,所有操作都在本地文件系统完成,不会影响生产数据。
  • 环境变量隔离本地与生产:在wrangler.toml中配置多环境,确保本地和生产使用不同的R2绑定:
    name = "my-hono-worker"
    main = "src/index.ts"
    compatibility_date = "2024-05-01"
    
    [env.production]
    r2_buckets = [
      { binding = "MY_R2_BUCKET", bucket_name = "my-production-bucket" }
    ]
    
    [env.local]
    r2_buckets = [
      { binding = "MY_R2_BUCKET", bucket_name = "my-local-bucket" }
    ]
    
    启动本地开发时指定环境:npm run dev -- --env local,部署生产时用wrangler deploy --env production,彻底隔离两类环境。
  • 自动化测试模拟:如果需要写单元测试,可以用@cloudflare/workers-testing-library来模拟R2操作,或者直接基于Wrangler的本地模拟跑测试用例,确保逻辑正确性。

四、安全注意事项

  • 绝对不要在本地代码中硬编码生产R2的密钥或访问凭证,全部通过Wrangler的环境绑定来传递。
  • 本地开发时禁止绑定真实生产R2桶,避免误操作导致生产数据丢失或泄露。

内容的提问来源于stack exchange,提问作者Aadesh Kulkarni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 04:41:09