使用 CloudFlare 突破图片防盗链

好久没更了,最近遇到很多挑战,比如使用 Flutter 开发 App。打个岔,我发现 Cursor.sh 真是个好东西,面对 Flutter 这种我完全不熟悉的语言,Cursor 提供了很方便的 AI 辅助开发,包括一系列很好用的功能:

  1. Prompt => 代码
  2. 问题解释
  3. 结合上下生成代码或提供建议

如果是以前,我需要先看文档,学习 Get Started,然后慢慢一行一行摸索。现在我只要告诉 ChatGPT 我需要什么样的代码,它就能自动帮我升成一堆能用的代码,虽然不够好,但是比我自己慢慢搞效率高多了。

推荐各位使用。在面对自己不熟悉的语言、框架时,真的能大幅度提升效率。

回到正题。

前几天遇到一个问题。有个朋友要抓某个网站上的数据做电商网站,其中有很多图片。因为网站还没有上线,也不知道能不能挣到钱,所以想先降本,尽量不要先把钱花出去。

所以我就想,先不把图片都抓下来放自己的服务器上,直接使用对方的地址(盗链)行不行?测试一下,果然不行,有防盗链。然后我就想到 Serverless,感觉这是个很适合的场景:

  1. 先把源图片抓下来
  2. 进行一些处理,比如压缩、切割
  3. 然后返回一个新的图片

对于我们来说,只是不需要第二步而已,那就这么做吧。接下来就是选平台,其实我一般会优先用 Vercel,毕竟现在我大部分项目都在上面跑着。不过考虑到平时推荐 CloudFlare worder 的人也很多,他们家的免费方案也很慷慨,所以我想这次试试 CF 吧。

没想到 CF 的文档非常全,直接就提供了类似的用例教程:Custom Domain with Images · Cloudflare Workers docs,于是我就照猫画虎,搞定了这个需求。代码很简单,我觉得都不需要详细解释:

export default {
  async fetch(request) {
    // 解析图片地址,取出 pathname 部分
    const { pathname } = new URL(request.url);

    // 从原始地址获取图片,直接返回即可
    return fetch(`https://src-domain.com/${pathname}`);
  },
};

接下来的缓存等功能都是齐备的,不需要每次都返回源站。至于墙的问题,自己的域名 CNAME 过去,也是可以直接使用的。

CF 的还有很多教程和范例,建议大家抽空看看:Examples · Cloudflare Workers docs


总结

功能不大,开发体验很好,从查找文档到完成上线,总共可能花了一个小时多点。有流量之前都不用考虑费用问题。省心省力。以后准备多多用起来。

如果您觉得文章内容对您有用,不妨支持我创作更多有价值的分享:


已发布

分类

来自

标签:

评论

欢迎吐槽,共同进步

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据