> ## Content Index
> Fetch the complete content index at: https://nigzu.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# 使用C2 Object Storage作为图床
- URL: https://nigzu.com/c2-object-storage-alist/
- Published: 2022-10-22T10:08:51.000Z
- Updated: 2025-05-03T17:47:02.000Z
- Author: 宁嘉
- Tags: 自托管, Ghost

[C2 Object Storage](https://c2.synology.com/en-us/object-storage/overview?ref=nigzu.com)是群晖提供的云存储服务，有15G/月的免费额度（存储空间与流量），[付费计划](https://kb.synology.com/zh-tw/C2/tutorial/C2%5FObject%5FStorage%5Fpricing?ref=nigzu.com)也相当实惠，大陆地区可直接访问北美和欧洲两个数据中心，实测下载速度可达5M/s左右，这两个数据中心的额度是彼此独立的，如果你拥有群晖账号，则可以一键开通C2并在这两个区域任意切换，[Synology 知识中心-C2 Object Storage](https://kb.synology.com/zh-tw/search?services%5B%5D=C2%5FObject%5FStorage&ref=nigzu.com)可以找到有关安装与使用的说明。

C2 Object Storage[兼容](https://kb.synology.com/zh-tw/C2/tutorial/C2%5FObject%5FStorage%5FCompatible%5FAPI?ref=nigzu.com)大部分S3 API，在我看来，比较大的缺憾是不支持网站设定（文件直链，即链接域名不可自定义，并且是动态生成的：以Endpoint+有效期签名的形式）和CORS（跨站资源共享），不过，有办法解决这些问题，至少作为图床来说是足够的。

这得益于[Alist](https://github.com/alist-org/alist?ref=nigzu.com)这款开源文件列表托管程序，它可以将阿里云盘、OneDrive、蓝奏云、FTP、AWS S3、WebDAV、百度网盘、夸克网盘、一刻相册等个人网盘、对象存储服务OSS转为Web目录和WebDAV，并支持将其中的文件跨域直链，前提是你拥有一台24小时运行的服务器，并用Docker的方式部署它，部署的教程参考官方文档即可。

#### 主要说说用alist 作图床的好处：

1. 支持多个存储库，包括AWS S3、七牛云等，甚至包括不支持外链的阿里云盘、百度云盘，可将里面的文件转为固定直链，无需账号密码，直接访问。
2. 虚拟路径：同一个图床备份到多个存储库，万一C2存储库不能用了（如流量耗尽），不需要替换图片链接，只需要在alist修改并替换C2的虚拟路径即可。
3. 负载均衡：例如将图片同步上传到多个存储库（最好不要直接同步，而是另外上传到指定存储库，以免浪费C2流量），直链请求会随机解析到不同的存储库下载（有别于posix分布式文件系统，文件还是在各自的网盘中保存的，因此需要有相同的目录结构）。

#### 缺点和踩坑点：

1. C2文件上传之后不支持重命名。
2. alist不是真正的直链，它的直链是交给alist解析的，然后获取对应存储库的Endpoint+签名的链接。也就是说尽管图片数据是从存储库直接下载不需要经过alist服务器，但在这之前需要先将链接回源到alist解析并进行302跳转。
3. 也因此，用alist作图床的结果是比一般图床更慢的响应，当然下载速度还可以。
4. v3版alsit相比v2版的改动之处是：可以给v2版的图床所在文件夹加密码访问，不影响直链，而v3版对文件夹加密后会对直链+sign([v3版本如何配置直链 · Discussion #1688 · alist-org/alist (github.com)](https://github.com/alist-org/alist/discussions/1688?ref=nigzu.com))，因此需要在AList 管理-元信息中单独配置图床文件夹为无密码访问的形式。

#### 案例：用作Ghost博客的图床

由于我是在Obsidian编辑Markdown文章然后再复制到Ghost发布的，有一个需求：如何让图片在Obsidian中编辑时显示在本地又可以在发布到Ghost时不需修改链接即可直接显示网页上？

这里有可以取巧的地方：

1. 在Ghost后台设置重定向：
- Setting→Labs→Redirects→Download current redirects，增加两行：  
```yaml  
301:  
  ^\/file\/([\s\S]+)\/$: https://your_alist_domain/d/pics/$1  
```
- `your_alist_domain`改成你的alist服务器域名，修改后上传到设置：Upload redirects YAML/JSON
- 这表示在你的博客中访问`/file/*`的路径会被重定向你的alist存储库pics文件夹下的对应文件直链，例如`https://blog.example.com/file/1.jpg`自动重定向到`https://alist.example.com/d/file/1.jpg`。
1. 在Obsidian仓库新建文件夹`file`，启用Obsidian与alist存储库之间的文件同步（同步的方式有很多，这里不赘述）。
2. 设置Obsidian附件文件夹路径为`file`，内部链接类型为`基于仓库根目录的绝对路径`，这样外部图片拖动到Obsidian编辑窗口时文件自动存到仓库根目录下的file文件夹并在编辑器光标位置插入图片相对仓库根目录的路径。

![](https://nigzu.com/file/Pasted%20image%2020221022172855.png)

1. 注意要在file前手动加上根路径标识符`/`，如`![](file/1.png)`改为`![](/file/1.png)`。
2. 如果是照片，建议先压缩和去除元数据再粘贴到Obsidian。

这样一来，文章在Obsidian中为本地图片，可以备份和全平台同步，而发布到博客后又自动转为alist图床中的图片，优点是方便，缺点是图片在博文中经过两次回源和重定向，大大的增加了响应时间，如果你不十分在意这点的话。