一、结论
个人博客上传图片后生成可直接外链调用的图片直链,通常的做法是:先准备一个兼容 S3 协议的对象存储服务和存储桶,再在 PicGo、博客插件或博客后台中填写 Endpoint、AccessKey、SecretKey、Bucket、Region 等信息,连接成功后上传图片,最后获取对象的公开访问地址或临时签名地址。将该地址填入 Markdown 图片、文章封面或主题配图位置,即可在博客中直接调用。
二、准备工作
开始操作前,建议先准备以下内容:
- 对象存储账号,并确认已开通对象存储服务。
- 一个用于存放图片的存储桶 Bucket。
- S3 接入地址 Endpoint。
- 用于身份验证的 AccessKey 和 SecretKey。
- 服务要求填写的 Region 信息。
- 支持 S3 协议的客户端、程序或插件,例如 PicGo、Cloudreve、Alist、Halo、WordPress S3 类插件等。
- 需要上传的图片文件,并提前整理文件名或目录规则。
如果使用的是自建 MinIO 或其他 S3 兼容存储,也要确认服务可正常访问、密钥具备对应权限,并提前规划好图片是公开读取还是私有访问。
三、操作步骤
1. 创建或准备存储桶
在对象存储服务中创建一个专门用于博客图片的存储桶,或使用已有的图片存储桶。存储桶名称建议只使用小写字母、数字和连字符,便于后续在各种客户端中兼容。
完成后应得到一个明确的 Bucket 名称,后续在 PicGo、博客插件或程序配置中都需要使用它。
2. 获取 S3 接入信息
进入对象存储服务的密钥或接入信息页面,准备以下信息:
- Endpoint:服务提供的 S3 访问地址。
- AccessKey:访问密钥 ID。
- SecretKey:与 AccessKey 配对的密钥。
- Region:服务所在地域或客户端要求填写的区域标识。
- Bucket:刚才创建或准备使用的存储桶名称。
不同服务展示位置可能不同,但只要服务支持 S3 协议,一般都会提供这些核心信息。不要把 SecretKey 公开提交到前端代码或 Git 仓库。
3. 在客户端或博客程序中选择 S3 兼容存储
打开你使用的图床工具或博客程序,选择“S3 兼容存储”“Amazon S3”“S3 协议”或类似存储类型。
常见接入方式包括:
- PicGo:安装并配置 S3 兼容图床,上传后自动复制图片链接。
- Halo:在后台存储或附件相关配置中选择 S3 兼容存储。
- WordPress:使用支持 S3 对象存储的媒体或附件插件,将上传文件转移到对象存储。
- Cloudreve、Alist 或其他网盘系统:在存储策略中添加 S3 存储源。
- 自建博客系统:在程序后台或配置文件中填写 S3 参数。
完成选择后,应进入一个需要填写 Endpoint、密钥、存储桶和区域的配置页面。
4. 填写 S3 配置信息
按照服务提供的信息依次填写:
- Endpoint
- AccessKey
- SecretKey
- Bucket
- Region
如果客户端还有自定义域名、路径样式、访问域名、文件路径规则等选项,应根据对象存储服务说明和博客需求填写。不确定的选项先保持默认,不要随意开启不兼容的配置。
保存后,程序通常会使用这些信息尝试列出存储桶、上传测试文件或验证身份。
5. 测试连接并上传测试图片
先使用一张较小的测试图片上传,确认是否成功。上传时可以指定目录,例如按年月分类,便于以后管理大量博客图片。
上传成功后,应能在存储桶中看到该图片文件,并在客户端或博客后台得到一个图片访问地址。
6. 确认图片可直接访问
复制生成的图片链接,在浏览器无痕窗口中打开,确认图片能够正常加载,而不是显示权限错误、登录页面或报错信息。
如果存储桶和对象是私有的,需要使用程序生成临时签名链接;如果希望博客图片长期通过固定地址公开访问,则应确保对象具备读取权限,并使用服务提供的对象访问域名或已配置的自定义域名。
7. 在博客文章中调用图片
确认链接可访问后,就可以在博客中使用:
- Markdown 中使用图片语法插入图片。
- HTML 中使用图片标签调用。
- 文章封面、主题配图、头像或附件位置直接填写图片 URL。
- 在支持远程图片的编辑器中粘贴直链。
建议先发布一篇测试文章,在前台页面检查图片是否正常显示,避免后台预览正常但前台无法访问。
四、常见错误
1. Endpoint 填写错误
Endpoint 多写、少写、误带存储桶名称,或把控制台地址当成 S3 访问地址,都会导致连接失败。应复制对象存储服务提供的 S3 接入地址,并确认客户端是否要求带协议头。
2. AccessKey 或 SecretKey 填错
密钥前后有空格、复制不完整,或把其他账号的密钥填入当前存储桶,都会造成认证失败。建议重新核对密钥,并确认密钥没有被禁用或删除。
3. Bucket 名称不一致
存储桶名称大小写、连字符或地域前缀填写错误,程序可能找不到目标存储桶。应与对象存储控制台中的 Bucket 名称完全一致。
4. Region 填写不匹配
有些 S3 兼容服务要求 Region 与存储桶所在地域一致,有些客户端则允许使用默认值。如果出现区域错误,可优先检查 Region 是否与服务说明一致。
5. 权限不足导致上传失败
即使密钥正确,如果该密钥没有上传、读取或列出存储桶的权限,也会操作失败。应检查访问密钥策略或子账号权限,确保其对目标存储桶有必要权限。
6. 上传成功但链接无法访问
这种情况通常与对象权限、访问域名、路径样式或签名有效期有关。先在浏览器无痕窗口测试链接,再检查文件是否为私有、域名是否可用、客户端生成的 URL 是否与服务要求一致。
五、示例说明
下面是一个通用配置示例,仅用于说明字段含义,不代表真实地址或密钥:
- Endpoint:填写对象存储服务提供的 S3 访问地址
- AccessKey:填写你的访问密钥 ID
- SecretKey:填写你的访问密钥
- Bucket:填写你的存储桶名称
- Region:根据服务或客户端要求填写对应区域
- 上传路径:可按日期或目录设置,例如
blog/images/ - 访问域名:使用服务默认访问域名或你自己配置的域名
配置完成后,上传一张图片,程序通常会生成类似“访问域名 + 目录 + 文件名”的图片地址。实际链接格式以所使用的对象存储服务和客户端为准。
六、更简单的方案
如果不想自己部署和维护 MinIO,也不想再额外管理服务器磁盘、备份和访问域名,可以直接使用兼容 S3 协议的云对象存储服务。博客站长只需要在图床工具或博客插件中填写 S3 信息,即可上传图片并获得可访问的直链。
如果你需要一个兼容 S3 协议、适合程序接入、图床、网盘系统存储源和下载分发的对象存储服务,可以了解 七彩云对象存储。它适合需要 S3 接入、文件直链和低成本文件分发的个人博客、资源站或开发者项目。
七、FAQ
1. 图片上传成功后,为什么打开链接是 403 或权限错误?
通常是因为图片或存储桶为私有访问,链接没有签名或签名已过期。可以在程序中生成临时签名 URL,或按服务规范设置对象读取权限。公开图片仍需注意不要把存储桶的写入权限暴露出去。
2. PicGo 里应该选择 Amazon S3 还是其他 S3 兼容存储?
如果使用的云对象存储支持标准 S3 协议,一般可以选择 Amazon S3 或 S3 兼容存储类型,然后填写服务提供的 Endpoint、密钥、Bucket 和 Region。若连接失败,优先检查 Endpoint 格式、Region 和路径样式选项。
3. WordPress 或 Halo 上传图片后,如何确认走的是对象存储?
上传后查看媒体文件或附件的 URL。如果链接域名是对象存储访问域名或配置的自定义域名,而不是博客服务器自身域名,通常说明附件已经存放到对象存储。也可以登录存储桶查看是否存在对应文件。
4. 图片直链必须以 .jpg、.png 结尾吗?
不一定。多数对象存储的链接路径中会包含对象文件名和后缀,但有些签名链接会在后面附带参数。只要浏览器访问后返回正确的图片内容,并且博客页面可以正常加载,就可以作为图片直链使用。
5. 可以把 AccessKey 和 SecretKey 写在前端页面里吗?
不可以。前端页面中的密钥会被其他用户看到,可能导致存储桶被恶意写入或删除。密钥应只保存在博客后端、插件配置、图床客户端或服务端环境变量中。
八、总结
整体流程可以概括为:准备存储桶和 S3 接入信息,在图床客户端或博客程序中选择 S3 兼容存储,填写 Endpoint、AccessKey、SecretKey、Bucket、Region,测试连接后上传图片,最后复制可公开访问或带签名的图片链接并嵌入博客。
这种方式适合个人博客图床、文章配图、网站附件、网盘系统存储源、下载站和资源站等场景。相比把图片放在博客服务器本地,使用 S3 对象存储更便于迁移、扩容和统一管理;配合 PicGo 或博客插件使用,日常发文时上传和插入图片也会更顺畅。
想进一步了解这个项目?
访问官网查看产品能力、适用场景和最新服务信息。
访问官网