基于 Bilibili 动态 API 搭建免费图床

本文介绍一种利用 Bilibili 用户动态图片上传 API 搭建免费图床的方法。 该方案需要提供 SESSDATAbli_jct 两个 Cookie 值。 获取方式如下:

  1. 登录 Bilibili 网站。

  2. F12 打开开发者工具控制台。

  3. 在 “网络(Network)” 或 “应用程序(Application)” 选项卡中,找到包含 SESSDATAbli_jct 字段的 Cookie 信息,复制其值。

安装与配置

在线安装

打开 PicGo 详细窗口,选择 插件设置,搜索 bili 并安装。 安装完成后,无需重启应用即可使用。

离线安装

  1. 克隆项目代码仓库。
  2. 复制项目目录至以下路径:
    • Windows: %APPDATA%\picgo\
    • Linux: $XDG_CONFIG_HOME/picgo/ or ~/.config/picgo/
    • macOS: ~/Library/Application\ Support/picgo/
  3. 切换至新的目录,执行 npm install ./picgo-plugin-bilibili 命令。
  4. 重启 PicGo 应用。

图片样式

例如,原始图片链接为: https://i0.hdslb.com/bfs/face/d91ddc4a53daa5c83302ce77cbb3e746a5e0aafb.webp

可以通过添加参数来调整图片的尺寸和质量: https://i0.hdslb.com/bfs/face/d91ddc4a53daa5c83302ce77cbb3e746a5e0aafb.webp@14w_14h_1e_1c

类型URL
原始图片baseURL/1.webp
原始分辨率,质量压缩baseURL/1.webp@1e_1c.webp
规定宽度,高度自适应,质量压缩baseURL/1.webp@104w_1e_1c.webp
规定高度,宽度自适应,质量压缩baseURL/1.webp@104h_1e_1c.webp
规定高度宽度,质量压缩baseURL/1.webp@104w_104h_1e_1c.webp
原始分辨率,webp格式(占用最小)baseURL/1.webp@104w_104h_1e_1c.webp
规定高度,webp格式(占用最小)baseURL/1.webp@104w_104h_1e_1c.webp

格式:(图像原链接)@(\d+[whsepqoc]_?)*(.(|webp|gif|png|jpg|jpeg))?$

参数说明:

  • w:[1, 9223372036854775807] (width,图像宽度)
  • h:[1, 9223372036854775807] (height,图像高度)
  • s:[1, 9223372036854775807] (作用未知)
  • e:[0,2] (resize,0:保留比例取其小,1:保留比例取其大,2:不保留原比例,不与c混用)
  • p:[1,1000] (默认100,放大倍数,不与c混用)
  • q:[1,100] (quality,默认75,图像质量)
  • o:[0,1] (作用未知)
  • c:[0,1] (clip,0:默认,1:裁剪)
  • webp, png, jpeg, gif (不添加则保留原始格式)
  • 参数不区分大小写,相同参数后定义的会覆盖先定义的参数。
  • 计算后的实际 w * h 不能大于原始图片的 w * h, 否则 wh 参数将失效。

解决 Bilibili 防盗链 (403) 问题

Bilibili 启用了防盗链机制,通过 HTTP Referer 属性进行判断。 如果 Referer 不在白名单内,服务器会返回 403 错误。

全站图片

在 HTML 的 <head> 标签中设置以下 meta 标签,阻止浏览器发送 Referer:

html
1
<meta name="referrer" content="no-referrer">

该标准可能不被旧版本浏览器支持,可以使用以下代码,提供更好的兼容性:

plaintext
1
2
HTML
<meta name="referrer" content="never">

新窗口打开链接

主要设置 rel="noreferrer"。 使用 window.open 打开链接默认会携带 Referer, 首次访问仍然会返回 403 错误。

plaintext
1
2
HTML
<a rel="noreferrer" target="_blank"></a>