通过自建 API 获取网页截图并上传到 R2 生成直链

通过自建 API 获取网页截图并上传到 R2 生成直链
雨天狂奔通过自建 API 获取网页截图并上传到 R2 生成直链
简介
此脚本是一个 Cloudflare Worker,用于截取网页并将截图自动上传到指定的 S3 兼容存储(如 AWS S3、Backblaze B2 或 Cloudflare R2)。它支持各种参数配置,例如截图格式、延迟、图像质量和截图区域等,能够根据请求自动生成截图并返回 S3 存储的 URL。
前置条件
- 一个 Cloudflare 账号并开通 R2 存储,点此注册,需要绑卡
- 或者一个 Backblaze 账号并开通 B2 存储,点此注册,无需绑卡
- 如果你在本项目中使用 R2 存储,请先看 开通R2并绑定自定义域名的教程
- 如果你在本项目中使用 B2 存储,就先看 我的教程
- 到 apiflash 注册一个免费的 API_KEY,点此注册,该 API 限制每月请求 100 次
- 按以下代码设置 R2 的 CORS 跨域规则
1 | [ |
- B2 存储的 CROS 跨域规则设置较为麻烦,看 这篇教程
基本逻辑
- 通过 CF worker 反代获取 apiflash API 对指定网站的截图,同时不在前端暴露 API_KEY 信息
- 将截图上传到 R2 或 B2 存储
- 返回截图信息,包括直链地址
部署
- 到 CF 新建一个 worker
- 到此仓库复制 sitesc/sitesc-api-back.js代码,粘贴到 worker 中,点击部署
- 设置以下环境变量
环境变量配置说明
环境变量 | 必填 | 默认值 | 说明 |
---|---|---|---|
APIFLASH_KEY |
是 | - | APIFlash API 密钥 |
S3_ACCESS_KEY_ID |
是 | - | S3 访问密钥 ID |
S3_SECRET_KEY |
是 | - | S3 密钥访问密钥 |
S3_BUCKET |
是 | - | S3 存储桶名称 |
CUSTOM_DOMAIN |
是 | - | S3 自定义域名 (如 https://b2qq.xxxxxx.com ) |
S3_ENDPOINT |
是 | - | S3 端点 URL |
S3_KEY |
否 | apiflash |
S3 存储路径前缀(即文件夹名) |
S3_REGION |
否 | - | S3 区域 |
兼容性说明
此代码兼容以下 S3 兼容存储服务:
Cloudflare R2:
S3_ENDPOINT
:https://<account-id>.r2.cloudflarestorage.com
upload_type
: “Cloudflare R2”
Backblaze B2:
S3_ENDPOINT
:https://s3.<region>.backblazeb2.com
upload_type
: “Backblaze B2”
其他 S3 兼容服务:
- 将使用默认的 “S3” 作为
upload_type
- 将使用默认的 “S3” 作为
使用说明
请求方式:get
接口路径:/sc
接口示例: 被截图的网站必须带 http://
或 https://
前缀
1 | https://your-worker-url/sc/https://github.com |
进阶用法
- 指定截图类型
type
,默认webp
,支持jpg、png、webp
1 | https://your-worker-url/sc/https://github.com?type=png |
- 其他主要参数
参数名 | 默认值 | 释义 |
---|---|---|
wait_until |
network_idle | dom_loaded:html 加载即截图;page_loaded:网页完整加载;network_idle:页面完整加载且网络空闲 |
width |
854 | 截图宽度,单位:像素 |
height |
480 | 截图高度,单位:像素 |
quality |
85 | 图片质量,仅当 type 为 jpg 时生效 |
delay |
2 | 延迟,单位:秒,延迟 X 秒截图;当设置了 wait_until 后可忽略此参数 |
进阶示例:
1 | https://your-worker-url/sc/https://github.com?type=jpg?width=1920?height=1080?wait_until=page_loaded&quality= |
支持的上传平台
Cloudflare R2:
S3_ENDPOINT
:https://<account-id>.r2.cloudflarestorage.com
upload_type
: “Cloudflare R2”
Backblaze B2:
S3_ENDPOINT
:https://s3.<region>.backblazeb2.com
upload_type
: “Backblaze B2”
其他 S3 兼容服务:
- 将使用默认的 “S3” 作为
upload_type
- 将使用默认的 “S3” 作为
返回数据示例
1 | { |
其中 direct_url
即为截图上传后的直链地址
#cloudflare #存储 #建站
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果