解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南
[目录]
0.行文概述
1.PicGo图片上传失败
2.*关于在Vscode中Marp图片的编译问题*
3.总结与启示
行文概述
写作本文的动机是本人看到了Awesome Marp,发现使用 Markdown \texttt{Markdown} Markdown做PPT若加持一些 CSS , JavaScript \texttt{CSS},\texttt{JavaScript} CSS,JavaScript,效果也能非常好。然后就发现,按照Awesome Marp的配置教程中,对于没有 JavaScript \texttt{JavaScript} JavaScript基础者而言,需要配置的东西相对较多。对本人而言,费时间最久的则是PicGo的Github图床设置问题。因该问题相对复杂且具有代表,故整理一篇教程。
作为一款广受欢迎的图床上传工具,PicGo 以其便捷性和多平台支持赢得了许多用户的青睐,尤其是配合 GitHub 作为免费图床的方案。然而,在配置 PicGo 连接 GitHub 的过程中,一些“拦路虎”常常会让用户头疼不已。本文将通过一个真实的故障排查案例,详细记录如何一步步解决从 SSL 证书验证失败到找不到目标分支等一系列问题,希望能为遇到类似困境的朋友提供一份清晰的解决指南。
案例背景: 一位用户 (HorseRunningWild,好吧,也就是本人) 在配置 PicGo (v2.3.1 或相近版本) 使用 GitHub 作为图床时,反复遭遇上传失败。
PicGo图片上传失败
本文主要旨在解决两类问题
-
第一类
unable to verify the first certificate
-
第二类
同样显示类似上文的"上传失败",但 error \texttt{error} error什么也不报。仅显示“{}”。
第一步:初步诊断与常规检查
面对这类网络相关的错误,我们通常会从几个方面入手:
-
PicGo 日志分析:
首先我们应该打开PiCGo的日志:可以发现
.log
文件中有类似内容2025-05-14 07:50:31 [PicGo ERROR] { "method": "PUT", "url": "https://api.github.com/repos/picture-bed/repo/contents/images/logo.png", "statusCode": 0, "message": "unable to verify the first certificate", "stack": "Error: unable to verify the first certificate\n at TLSSocket.onConnectSecure (node:_tls_wrap:1530:34)\n at TLSSocket.emit (node:events:394:28)\n at TLSSocket._finishInit (node:_tls_wrap:944:8)\n at TLSWrap.ssl.onhandshakedone (node:_tls_wrap:725:12)", "response": {"status": 0,"statusCode": 0,"body": "" }
unable to verify the first certificate
和statusCode: 0
是核心线索,表明问题出在网络层,甚至在 HTTP 请求发出之前。 -
网络环境切换: 遇到上述问题,可首先尝试更换网络。因为本人原本使用的是学校的网络,考虑到学校的网可能会有一些限制,故从切换到手机热点。但问题依旧。这在一定程度上排除了本地路由器配置或特定 ISP 策略的干扰,将疑点更多地引向了计算机本身的配置。
-
PicGo 配置项
rejectUnauthorized
: 既然显示的是类似verify certificate
的问题,接下来可能的尝试是在 PicGo 设置中(就在打开日志文件的上一条)的图床部分添加{ "picBed": { "github": {"repo": "your/repo","branch": "main","token": "your-token","path": "images/","customUrl": "","rejectUnauthorized": false // 新添加的代码 }
来尝试绕过 SSL 证书验证。虽然在本案例中用户也尝试过类似设置或默认情况下此选项可能不那么严格,但错误依然顽固。这暗示问题可能比单纯的证书链不完整更深层。
第二步:curl
命令显神威,定位DNS解析异常
当应用层面的调试陷入僵局时,动用底层网络诊断工具往往能带来突破。我们在这里会用到curl
命令(发音同 “curl”)。curl
是一个非常强大的命令行工具和库 (libcurl),用于通过 URL 与服务器进行数据传输。它支持多种网络协议,包括HTTP/HTTPS (最常用的,用于网页和 API)等等。在 macOS 和许多 Linux 发行版中,curl
通常是预装的,也就是系统自带的。
在 Windows 10/11 的较新版本中,curl.exe
也已经成为内置命令,可以直接在命令提示符 (CMD) 或 PowerShell 中使用。
curl的基本用法,如获取网页内容 (GET 请求):
curl https://www.example.com
这会下载https://www.example.com
的 HTML 内容并显示在终端。
而我们需要的则是curl -v
curl -v https://api.github.com
-v
(verbose) 参数让 curl
输出了详细的连接过程信息。很快,关键问题浮出水面:
* Host api.github.com:443 was resolved.
* IPv6: (none)
* IPv4: 127.0.0.1 <-- 症结所在!
* Trying 127.0.0.1:443...
* schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - 吊销功能无法检查证书是否吊销。
* closing connection #0
curl: (35) schannel: next InitializeSecurityContext failed: CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - 吊销功能无法检查证书是否吊销。
重大发现! api.github.com
竟然被解析到了 127.0.0.1
,也就是 localhost
(用户自己的电脑)。这意味着 PicGo 和 curl
在尝试连接 GitHub API 时,实际上是在“自己打自己”。本地计算机自然不可能提供 api.github.com
的有效 SSL 证书,因此“无法验证第一个证书”的报错也就顺理成章了。
第三步:揪出 hosts
文件中的“内鬼”
什么会导致域名被错误地解析到本地回环地址呢?最常见的元凶就是系统的 hosts
文件。
- Windows:
C:\Windows\System32\drivers\etc\hosts
- macOS/Linux:
/etc/hosts
在windows中,可以以管理员身份运行记事本,找到C:\Windows\System32\drivers\etc\hosts
。在本人检查其 hosts
文件后,真相大白。原来,一款名为 “Steam++” 的 GitHub 加速软件为了实现其加速功能,修改了 hosts
文件,将大量 GitHub 相关域名(包括我们关心的 api.github.com
)指向了 127.0.0.1
,企图通过本地代理周转流量。
# Steam++ Start
...
127.0.0.1 steamcdn-a.akamaihd.net
...
127.0.0.1 api.github.com <-- 就是你!
127.0.0.1 gist.github.com
...
127.0.0.1 github.com
...
# Steam++ End
当然,在此处显然也不是要苛责该加速器,因为确实,要是没有加速器,就只能挂梯子上Github了…
解决方案:
以管理员权限编辑 hosts
文件,将 127.0.0.1 api.github.com
这一行注释掉(在行首加 #
)或直接删除。
# 127.0.0.1 api.github.com
修改保存后,务必刷新系统 DNS 缓存:
- Windows (管理员CMD):
ipconfig /flushdns
再次执行 curl -v https://api.github.com
,输出结果令人振奋:
* Host api.github.com:443 was resolved.
* IPv6: (none)
* IPv4: 20.205.243.168 <-- 正确解析到 GitHub 公网 IP!
* Trying 20.205.243.168:443...
* Connected to api.github.com (20.205.243.168) port 443
...
< HTTP/1.1 200 OK
...
网络通了!SSL 证书问题迎刃而解。
第四步:新挑战——“找不到 master 分支”
满心欢喜地再次尝试 PicGo 上传,然而,新的错误出现了:
{"method": "PUT","url": "https://api.github.com/repos/HorseRunningWild/picturebed/contents/images/logo.png","statusCode": 404, // 注意,不再是 0 了!"message": "Request failed with status code 404","response": {"body": {"message": "Branch master not found", // 关键信息!"documentation_url": "https://docs.github.com/rest/repos/contents#create-or-update-file-contents"}}
}
这次的 statusCode: 404
表明 PicGo 已经成功连接并与 GitHub API 服务器进行了通信,但服务器反馈“未找到资源”。具体的错误消息是 Branch master not found
。
原因分析:
近年来,出于社区多元化和包容性的考量,GitHub 将新建仓库的默认分支名称从 master
更改为了 main
。如果用户的 picturebed
仓库是近期创建的,其默认分支很可能就是 main
。而 PicGo 的 GitHub 上传配置中,默认或用户之前配置的分支名可能仍然是 master
。但是,截止本文写作期间,PicGo官网的配置手册示例中仍然是 master
,容易对新人造成误导。
PicGo 配置中对应的部分:
// PicGo 配置文件中的 githubUploader 部分
"github": {"repo": "HorseRunningWild/picturebed","branch": "master", // <-- 这里可能与实际不符,应该改为main"token": "ghp_YourTokenHere","path": "images/","customUrl": ""
}
解决方案:
- 确认仓库实际分支名: 前往
https://github.com/HorseRunningWild/picturebed
,查看仓库页面的分支选择器,确认主分支名称(大概率是main
)。 - 修改 PicGo 配置: 将 PicGo 配置文件中 GitHub 上传器的
branch
字段值从"master"
修改为实际的分支名,如"main"
。"github": {"repo": "HorseRunningWild/picturebed","branch": "main", // 更新为正确的分支名// ... }
- 保存配置,重启 PicGo (如果需要) 后再次尝试上传。
关于在Vscode中Marp图片的编译问题
因为图床毕竟是放在Github中,所以有时会出现,分明将图片的Markdown
代码好好地放在IDE中,却无论如何也无法渲染出来。这种问题一般是两种可能:
-
网络问题。试试挂上VPN,因为国内访问Github的确受限。
或者,也可以直接尝试能否在浏览器种访问自己的图片,比如:
https://raw.githubusercontent.com/HorseRunningWild/picturebed/main/images/logo of hrw.jpg
如果可以的话,显然就是网络问题了。
-
检查自己的仓库是否为Public。
-
其它一些如Vscode中的Markdown插件问题,就不再赘述。
总结与启示
- 日志是金: 无论是应用程序日志 (PicGo) 还是工具输出 (
curl -v
),详细的日志信息都是定位问题的基石。 - 底层工具的重要性: 当上层应用报错模糊时,使用如
curl
,ping
,nslookup
等网络诊断工具可以直接探测网络连通性和服务响应情况。 - 警惕“加速器”的副作用: 各类网络加速或代理工具,尤其是那些会修改系统
hosts
文件的,有时会好心办坏事,干扰特定服务的正常连接。 - 与时俱进: 关注目标服务(如 GitHub)的默认设置变更,例如默认分支名从
master
到main
的转变,这可能导致依赖旧设置的工具出现兼容性问题。 - 系统化排查: 从应用层到网络层,再到系统配置层,逐层排查,由表及里,通常能更有效地找到问题根源。
- **对于同样希望使用Awesome-Marp的朋友的建议:**遇到问题可以多看Github上的
issue
,以及记得在安装PicGo前需要先安装和配置 Node.js \texttt{Node.js} Node.js,建议先参考Node.js安装及环境配置超详细教程【Windows系统】
希望这次真实的排查经历能帮助到更多正在或将要配置 PicGo + GitHub 图床的朋友们。祝大家折腾愉快,上传顺利!
相关文章:

解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南
[目录] 0.行文概述 1.PicGo图片上传失败 2.*关于在Vscode中Marp图片的编译问题* 3.总结与启示行文概述 写作本文的动机是本人看到了Awesome Marp,发现使用 Markdown \texttt{Markdown} Markdown做PPT若加持一些 CSS , JavaScript \texttt{CSS},\texttt{JavaScript} …...

软考 系统架构设计师系列知识点之杂项集萃(59)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(58) 第96题 假设关系模式R(U, F),属性集U{A, B, C},函数依赖集F{A->B, B->C}。若将其分解为p{R1(U1, F1), R2(U2, F2),其中U1{A, B}, U2{A, …...

python使用matplotlib画图
【README】 plot画图有两种方法:包括 plt.plot(), ax.plot()-画多个子图 ,其中ax表示某个坐标轴; 【1】画单个图 import matplotlib # 避免兼容性问题:明确指定 matplotlib 使用兼容的后端,TkAgg 或 Agg matplotlib.use(TkAgg) …...
鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp
使用 UniApp 开发实时聊天页面的最佳实践与实现 在移动应用开发领域,实时聊天功能已经成为许多应用不可或缺的组成部分。本文将深入探讨如何使用 UniApp 框架开发一个功能完善的实时聊天页面,从布局设计到核心逻辑实现,带领大家一步步打造专…...

upload-labs通关笔记-第5关 文件上传之.ini绕过
目录 一、ini文件绕过原理 二、源码审计 三、渗透实战 1、查看提示 2、制作.user.ini文件 (1)首先创建一个文本文件 (2)保存文件名为.user.ini 2、制作jpg后缀脚本 (1)创建一个文本文件 …...

ssti模板注入学习
ssti模板注入原理 ssti模板注入是一种基于服务器的模板引擎的特性和漏洞产生的一种漏洞,通过将而已代码注入模板中实现的服务器的攻击 模板引擎 为什么要有模板引擎 在web开发中,为了使用户界面与业务数据(内容)分离而产生的&…...

填涂颜色(bfs)
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝 含泪播种的人一定能含笑收获! 题目描述 由数字 0 0 0 组成的方阵中,有一任意形状的由数字 1 1 1 构成的闭合圈。现…...

ros1+docker环境快速搭建
快速使用python 解析ros1的bag消息ros这个东西可以说安装起来非常麻烦的,费时费力,很可能还安装不成功,特别是我的环境是ubuntu22.04 ,官方都不支持安装ros1。因此一个可行且快速的方法是使用别人配置好的ros的docker环境 一、下…...
vscode extention踩坑记
# npx vsce package --allow-missing-repository --no-dependencies #耗时且不稳定 npx vsce package --allow-missing-repository #用这行 code --install-extension $vsixFileName --force我问ai:为什么我的.vsix文件大了那么多 ai答:因为你没有用 --n…...

GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)
目录 背景一、算力困境:AI开发者的「三重诅咒」1.1 硬件成本黑洞1.2 资源调度失衡1.3 环境部署陷阱 二、三大核心技术突破GpuGeek的破局方案2.1 分时切片调度引擎(Time-Slicing Scheduler)2.2 异构计算融合架构2.3 AI资产自动化…...
【TroubleShoot】禁用Unity Render Graph API 兼容模式
使用Unity 6时新建了项目,有一个警告提示: The project currently uses the compatibility mode where the Render Graph API is disabled. Support for this mode will be removed in future Unity versions. Migrate existing ScriptableRenderPasses…...
数据库字段唯一性修复指南:从设计缺陷到规范实现
数据库字段唯一性修复指南:从设计缺陷到规范实现 一、问题背景 表结构设计缺陷: sys_user 表未对 dingtalk_user_id(钉钉用户ID)字段设置唯一性约束,导致数据重复,引发以下问题: 系统稳定性风…...

DataX从Mysql导数据到Hive分区表案例
0、下载DataX并解压到对应目录 DataX安装包,开箱即用,无需配置。 https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz 相关参考文档 https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md 1、Hive分区…...
高性能编程相关
常见高性能编程技巧: 一,系统级性能优化:从系统架构设计考虑,例如消息队列,模块分成分级,IO读写带宽等 二,算法级性能优化:时间和空间优化 三,代码级性能优…...

vulnhub靶场——secarmy
靶机:secarmy靶机,IP地址为192.168.230.18 攻击:kali,IP地址为192.168.230.134 靶机和攻击机都采用VMware虚拟机,都采用NAT模式 端口扫描: nmap 192.168.230.18 -O -A -p- --reason -sV 21/tcp (ftp): 开…...

labview硬件采集
(1)硬件的描述 (2)实验步骤1: (3)实验步骤2 库名/路径的选择要使用32位的开发资料 (4)实验步骤3 (5)实验步骤4 找到DoSetV12() 设置返回类型 设置chan 设置state labv…...

openfeign与dubbo调用下载excel实践
一、前言 openfeign和dubbo均是rpc框架 RPC(Remote Procedure Call,远程过程调用)框架 是一种允许程序像调用本地方法一样调用远程服务器上函数的技术。它隐藏了底层网络通信的复杂性,让开发者可以专注于业务逻辑,实现…...

ISP有感自发
一、黑电平 由于传感器,即便在无光的情况下,依然会产生微小的暗电流,这些暗电流可能是噪点会影响后期的调试。因此,我们便将这些电流处理为0,成为纯黑的颜色。可以在源头消除这些误差。 如何矫正黑电平: …...

web 自动化之 PO 设计模式详解
文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构?1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…...

NVMe简介1
它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA…...

【python机器学习】Day 25 异常处理
知识点: 异常处理机制debug过程中的各类报错try-except机制try-except-else-finally机制 在即将进入深度学习专题学习前,我们最后差缺补漏,把一些常见且重要的知识点给他们补上,加深对代码和流程的理解。 借助ai写代码的时候&…...

数学建模初等模型应用
一、目的 掌握初等模型的建模方法,对简单的初等模型能借助Matlab工具软件进行辅助建模、求解和检验。 二、实验内容与设计思想(设计思路、主要代码分析) 1、预测鱼的质量 (1)设计思路:使用线性回归模型预测鱼的质量…...
占位符读取标准输入缓冲区规则
1、如果标准输入缓冲区中的前若干个字符都是空白字符,%s,%d,%f都能直接跳过并且从第一个非空白字符开始读取,但%c不能,而是直接读取。 2、%s遇到空白字符时停止,不会读取遇到的空白字符。 3、%d遇到非数字…...

【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务
原文地址:https://developer.aliyun.com/article/1662946 在当今快速发展的AI技术背景下,如何高效地集成模型能力成为开发者关注的重点。本文将手把手教你如何基于 Spring AI 搭建支持 SSE(Server-Sent Events)模式的 MCP 服务 相…...
【kafka】kafka概念,使用技巧go示例
1. Kafka基础概念 1.1 什么是Kafka? Kafka是一个分布式流处理平台,用于构建实时数据管道和流式应用。核心特点: 高吞吐量:每秒可处理百万级消息持久化存储:消息按Topic分区存储在磁盘分布式架构:支持水平…...

利用散点图探索宇航员特征与太空任务之间的关系
利用散点图探索宇航员特征与太空任务之间的关系 import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom flexitext import flexitext from matplotlib.patches import FancyArrowPatchplt.rcParams.update({"font.family": "Corbel&quo…...
Ubuntu 命令行显示中文输出信息
Ctrl Alt T 打开终端命令行, 输入命令: sudo apt-get install language-pack-zh-hans安装中文语言支持包 sudo apt-get install language-pack-zh-hans-base配置环境变量 sudo vim /etc/profile进入文件后,按下 a 进入编辑模式,shift ↓ \downarr…...
Linux文件编程——read函数与lseek函数
一、read函数 在 Linux 文件编程中,read 函数是一个系统调用,用于从文件描述符(File Descriptor)指向的文件或设备中读取数据到缓冲区。它是 Unix/Linux 系统编程中实现底层 I/O 操作的核心函数之一。以下是 read 函数的详细使用…...
[思维模式-38]:看透事物的关系:什么是事物的关系?事物之间的关系的种类?什么是因果关系?如何通过数学的方式表达因果关系?
一、什么是事物的关系? 事物的关系是指不同事物之间存在的各种联系和相互作用,它反映了事物之间的相互依存、相互影响、相互制约等特性。以下从不同维度为你详细阐述: 1、关系的类型 因果关系 定义:一个事件(原因&a…...
【2025.5.12】视觉语言模型 (更好、更快、更强)
【2025.5.12】Vision Language Models (Better, Faster, Stronger): https://huggingface.co/blog/vlms-2025 【2024.4.11】Vision Language Models Explained【先了解视觉语言模型是什么】: https://huggingface.co/blog/vlms nanoVLM: https://github.…...