Typora + PicGo + MinIO 自建图床保姆级教程(附“上传成功但图片不回显“终极排查)
图床是每个 Markdown 写作者绕不开的一道坎。用别人的图床SM.MS、七牛、腾讯云 COS、阿里云 OSS要么有流量/容量限制要么要花钱要么担心哪天服务关停。自建图床——把图片存到自己的服务器上一劳永逸数据完全在自己手里。本文手把手带你用MinIO自托管对象存储 PicGo上传工具 Typora编辑器搭建一套属于自己的图床并重点解决一个新手必踩的坑图片明明上传成功了Typora 里却死活不显示目录一、整体架构先搞懂图片是怎么流的二、环境准备Docker 部署新版 MinIO2.1 拉取并启动 MinIO2.2 确认部署成功三、创建 Bucket四、安装并配置 PicGo4.1 安装 PicGo4.2 安装 MinIO 插件4.3 配置 MinIO 图床五、配置 Typora 关联 PicGo六、测试上传七、核心问题排查上传成功但图片不回显7.1 先做一个一锤定音的测试7.2 主因Bucket 是 PRIVATE匿名读被拒绝7.3 解决办法把 Bucket 设为匿名可下载7.4 用 MinIO Clientmc命令行设置匿名下载7.5 其他可能的原因7.6 为什么用 DOWNLOAD而不是 PUBLIC一、整体架构先搞懂图片是怎么流的关键点这个链路里有两个完全不同的动作——上传PUTPicGo 拿着你的AccessKey/SecretKey认证所以能写进去读取GET浏览器打开图片 URL 时是匿名的没有任何认证信息。上传成功但不回显的根因几乎总是出在第二步——Bucket 不允许匿名读取。二、环境准备Docker 部署新版 MinIOMinIO 是一个开源、兼容 Amazon S3 协议的对象存储服务轻量、部署简单非常适合做图床后端。本文以新版 MinIO Docker为例旧版和新版在端口、控制台界面上有差异注意区分。2.1 拉取并启动 MinIO在服务器上执行docker权限不够时前面加sudodocker run -d \ --name minio \ --restart unless-stopped \ -p 19000:9000 \ -p 19001:9090 \ -e MINIO_ROOT_USERminioadmin \ -e MINIO_ROOT_PASSWORD你的密码 \ -v /data/minio:/data \ minio/minio server /data --console-address :9090参数说明参数含义-p 19000:9000把宿主机的19000映射到容器的 S3API 端口9000PicGo 上传、浏览器访问图片都走它-p 19001:9090把宿主机的19001映射到容器的Console 控制台端口9090Web 管理界面MINIO_ROOT_USER/MINIO_ROOT_PASSWORD管理员账号密码新版统一用这两个环境变量旧的MINIO_ACCESS_KEY/MINIO_SECRET_KEY已废弃-v /data/minio:/data数据持久化把数据挂到宿主机容器删了数据还在划重点新版 MinIO 的默认端口是API9000、Console9090。上面的例子我映射成了19000/19001只是演示你可以用任何端口但后面 PicGo 里填的 endpoint 必须对应 API 端口这里即19000不是 Console 端口。填错端口是最常见的低级错误之一。如果你的服务器上有可视化控制面板会更简单。2.2 确认部署成功浏览器访问 Console 控制台http://你的服务器IP:19001用 username/ password登录能看到控制台就说明 MinIO 跑起来了。注意如果访问不了先检查云服务器安全组是否放行了19000、19001这两个端口以及防火墙firewalld/ufw是否拦截。这步不通后面全白搭。三、创建 BucketBucket 就是放图片的文件夹。在新版MinIO Console 左侧点击Buckets → Create BucketBucket Nametypora名称全局唯一且一旦创建不可改建议用小写字母创建完Bucket 列表里会出现一个typora它的Access访问策略默认是PRIVATE四、安装并配置 PicGo4.1 安装 PicGoPicGo 是一款开源免费的图床工具支持 Windows / macOS / Linux。https://github.com/Molunerfinn/PicGo4.2 安装 MinIO 插件PicGo 原生并没有内置 MinIO 图床所以我们需要去下载插件。安装后重启 PicGo在图床列表就能看到MinIO4.3 配置 MinIO 图床endPoint填写你的服务器ip地址或域名port填写你部署的MinIO占用的端口useSSL根据前面的endPoint选择如果是https的话就是yes反之是noaccessKey填写你的MinIO的账号用户名secretKey填写你的MinIO的密码bucket填写你创建的“桶”名不同插件的字段命名可能略有差异有的叫endpoint有的拆成server/port以你实际安装的插件界面为准填完记得保存并把 MinIO 设为默认图床图床设置里点设为默认。五、配置 Typora 关联 PicGo打开 Typora →文件 → 偏好设置 → 图像插入图片时…选择上传图像勾选对本地位置的图片应用上述规则、对网络位置的图片应用上述规则上传服务设定选择PicGo (app)PicGo 路径填 PicGo 的安装路径。六、测试上传在 Typora 里粘贴一张图片如果右下角弹出上传成功并且去看 MinIO 的 Bucket 里确实多出了文件说明PicGo → MinIO 这一段已经通了。但重点来了此时 Typora 里的图片可能依然是一片裂图 / 空白。这就是本文要解决的核心问题。七、核心问题排查上传成功但图片不回显7.1 先做一个一锤定音的测试把 Typora 里生成的那串图片 URL 直接复制到浏览器地址栏打开http://你的IP:19000/typora/20260901092717125.png会出现三种结果对应三种病因现象结论✅ 图片直接显示MinIO 权限、PicGo 都正常问题在 Typora 侧❌ 显示AccessDeniedBucket 权限问题❌ 打不开 / 超时安全组 / 端口 / 反向代理问题7.2 主因Bucket 是 PRIVATE匿名读被拒绝AccessDenied的原因 99% 是Bucket 的 Access 策略还是默认的PRIVATE。前面说过上传走的是认证 PUT能成功但浏览器读取是匿名 GETPRIVATE 不允许任何匿名访问于是 MinIO 直接拒绝图片自然显示不出来。一句话总结上传成功 ≠ 能公开读取。7.3 解决办法把 Bucket 设为匿名可下载去 MinIO 控制台找到typora这个 Bucket 的Access Policy访问策略 / 匿名访问把它从PRIVATE改成DOWNLOAD。新版 MinIO Console 已经不在 Bucket 页面上直接提供这个切换入口了旧版有所以新手常在这里迷路。没关系用命令行mc更稳妥、也更通用。7.4 用 MinIO Clientmc命令行设置匿名下载这里有个大坑先预警Linux 上有两个东西都叫mc——如果你直接在服务器敲mc anonymous set download ...很可能会启动那个蓝色的文件管理器而不是 MinIO 客户端导致命令看似执行了其实什么都没改。解决方式是避开这个命令冲突推荐直接用 Docker 跑 MinIO Client干净又不污染系统sudo docker run --rm -it --entrypoint /bin/sh minio/mc进入容器后提示符变成sh-5.1#之类依次执行# ① 确认现在用的是真正的 MinIO Client mc --version # 应该显示 mc version ...而不是 GNU Midnight Commander # ② 配置你的 MinIO 连接alias 起个名字这里叫 minio mc alias set minio http://你的IP:19000 # 然后按提示输入 Access Key 和 Secret Key # ③ 验证连接是否成功可选 mc admin info minio # ④ 设置 typora 这个 Bucket 允许匿名下载 mc anonymous set download minio/typora # ⑤ 验证权限已生效 mc anonymous get minio/typora # 应该输出Access permission for minio/typora is downloadDocker 提示permission denied ... /var/run/docker.sock说明当前用户没权限访问 Docker 守护进程。要么每次前面加sudo要么执行sudo usermod -aG docker $USER后退出重新登录 SSH即可。7.5 其他可能的原因如果权限改完浏览器还是打不开依次检查云服务器安全组是否放行 API 端口19000TCP 入方向Docker 端口映射-p 19000:9000是否映射正确用docker ps确认HTTP / HTTPS 混合内容如果你的 Typora 页面环境是 HTTPS却引用http://的图片浏览器会因混合内容拦截而加载失败。图床方案里尽量给 MinIO 配 HTTPS。7.6 为什么用DOWNLOAD而不是PUBLICMinIO 的匿名策略有四档策略匿名读GET匿名写PUT说明nonePRIVATE❌❌完全私有任何人匿名都不能访问download✅❌只允许匿名下载/读取upload❌✅只允许匿名上传public✅✅读写都开放做图床我们要的是别人能看图片但不能随便往你 Bucket 里传东西所以DOWNLOAD是唯一正确选择。设成public等于把桶完全敞开谁都能往里写文件有被塞垃圾文件甚至被滥用的风险切勿。写在最后本文是博主在配置TyporaPicGoMinIO时踩的坑写作时查阅了大量公开资料与文献力求内容准确。若有疏漏或表述不当之处欢迎大家指正也请多多包涵如果这篇笔记对你有帮助欢迎点赞 、收藏 ⭐、关注 你的支持是我继续更新的最大动力往期文章Linux 学习笔记 04 番外用户权限典型场景实操Linux 学习笔记 04一文读懂 Linux 用户与权限管理响应式之道 —— 媒体查询、容器查询与多列布局打破常规 —— CSS 定位与层叠上下文全解二维布局之王 —— CSS Grid 完全指南

相关新闻

一键全自动,会是短剧译配的终点吗?

一键全自动,会是短剧译配的终点吗?

一键全自动,会是短剧译配的终点吗? 一键可以减少文件搬运和重复设置,却不能自动统一项目目标。输入、渠道和质量底线没有说清时,自动化只会更快复制同一种错误。一键可以减少文件搬运和重复设置,却不能自动统一项目目标…

2026/10/28 14:58:33 阅读更多 →
AST静态源码分析实战:审计agent-fleet-manager智能体集群架构

AST静态源码分析实战:审计agent-fleet-manager智能体集群架构

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 14:57:51 阅读更多 →
OI-wiki 语言篇:C++ Lambda 表达式在算法竞赛中的完整实战指南

OI-wiki 语言篇:C++ Lambda 表达式在算法竞赛中的完整实战指南

OI-wiki 语言篇:C Lambda 表达式在算法竞赛中的完整实战指南 【免费下载链接】OI-wiki :star2: Wiki of OI / ICPC for everyone. (某大型游戏线上攻略,内含炫酷算术魔法) 项目地址: https://gitcode.com/GitHub_Trending/oi/OI…

2026/10/25 20:16:54 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/27 17:33:32 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/28 7:28:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/28 9:02:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/27 18:20:50 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/28 9:00:54 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/28 7:29:02 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 13:55:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 9:01:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/27 19:19:37 阅读更多 →