解决 PicGo 上传 GitHub图床及Marp中Github图片编译常见难题指南

news2025/7/14 17:10:53
[目录]
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什么也不报。仅显示“{}”。

第一步:初步诊断与常规检查

面对这类网络相关的错误,我们通常会从几个方面入手:

  1. 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 certificatestatusCode: 0 是核心线索,表明问题出在网络层,甚至在 HTTP 请求发出之前。

  2. 网络环境切换: 遇到上述问题,可首先尝试更换网络。因为本人原本使用的是学校的网络,考虑到学校的网可能会有一些限制,故从切换到手机热点。但问题依旧。这在一定程度上排除了本地路由器配置或特定 ISP 策略的干扰,将疑点更多地引向了计算机本身的配置。

  3. 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": ""
}

解决方案:

  1. 确认仓库实际分支名: 前往 https://github.com/HorseRunningWild/picturebed,查看仓库页面的分支选择器,确认主分支名称(大概率是 main)。
  2. 修改 PicGo 配置: 将 PicGo 配置文件中 GitHub 上传器的 branch 字段值从 "master" 修改为实际的分支名,如 "main"
    "github": {
      "repo": "HorseRunningWild/picturebed",
      "branch": "main", // 更新为正确的分支名
      // ...
    }
    
  3. 保存配置,重启 PicGo (如果需要) 后再次尝试上传。

关于在Vscode中Marp图片的编译问题


因为图床毕竟是放在Github中,所以有时会出现,分明将图片的Markdown代码好好地放在IDE中,却无论如何也无法渲染出来。这种问题一般是两种可能:

  1. 网络问题。试试挂上VPN,因为国内访问Github的确受限。

    或者,也可以直接尝试能否在浏览器种访问自己的图片,比如:

    https://raw.githubusercontent.com/HorseRunningWild/picturebed/main/images/logo of hrw.jpg
    

    如果可以的话,显然就是网络问题了。

  2. 检查自己的仓库是否为Public。

  3. 其它一些如Vscode中的Markdown插件问题,就不再赘述。

总结与启示

  1. 日志是金: 无论是应用程序日志 (PicGo) 还是工具输出 (curl -v),详细的日志信息都是定位问题的基石。
  2. 底层工具的重要性: 当上层应用报错模糊时,使用如 curl, ping, nslookup 等网络诊断工具可以直接探测网络连通性和服务响应情况。
  3. 警惕“加速器”的副作用: 各类网络加速或代理工具,尤其是那些会修改系统 hosts 文件的,有时会好心办坏事,干扰特定服务的正常连接。
  4. 与时俱进: 关注目标服务(如 GitHub)的默认设置变更,例如默认分支名从 mastermain 的转变,这可能导致依赖旧设置的工具出现兼容性问题。
  5. 系统化排查: 从应用层到网络层,再到系统配置层,逐层排查,由表及里,通常能更有效地找到问题根源。
  6. **对于同样希望使用Awesome-Marp的朋友的建议:**遇到问题可以多看Github上的issue,以及记得在安装PicGo前需要先安装和配置 Node.js \texttt{Node.js} Node.js,建议先参考Node.js安装及环境配置超详细教程【Windows系统】

希望这次真实的排查经历能帮助到更多正在或将要配置 PicGo + GitHub 图床的朋友们。祝大家折腾愉快,上传顺利!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2376044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考 系统架构设计师系列知识点之杂项集萃(59)

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

python使用matplotlib画图

【README】 plot画图有两种方法&#xff1a;包括 plt.plot(), ax.plot()-画多个子图 &#xff0c;其中ax表示某个坐标轴; 【1】画单个图 import matplotlib # 避免兼容性问题&#xff1a;明确指定 matplotlib 使用兼容的后端&#xff0c;TkAgg 或 Agg matplotlib.use(TkAgg) …

upload-labs通关笔记-第5关 文件上传之.ini绕过

目录 一、ini文件绕过原理 二、源码审计 三、渗透实战 1、查看提示 2、制作.user.ini文件 &#xff08;1&#xff09;首先创建一个文本文件 &#xff08;2&#xff09;保存文件名为.user.ini 2、制作jpg后缀脚本 &#xff08;1&#xff09;创建一个文本文件 &#xf…

ssti模板注入学习

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

填涂颜色(bfs)

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

ros1+docker环境快速搭建

快速使用python 解析ros1的bag消息ros这个东西可以说安装起来非常麻烦的&#xff0c;费时费力&#xff0c;很可能还安装不成功&#xff0c;特别是我的环境是ubuntu22.04 &#xff0c;官方都不支持安装ros1。因此一个可行且快速的方法是使用别人配置好的ros的docker环境 一、下…

GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)

目录 背景一、算力困境&#xff1a;AI开发者的「三重诅咒」1.1 硬件成本黑洞‌1.2 资源调度失衡‌1.3 环境部署陷阱‌ 二、三大核心技术突破GpuGeek的破局方案2.1 ‌分时切片调度引擎&#xff08;Time-Slicing Scheduler&#xff09;‌2.2 ‌异构计算融合架构2.3 ‌AI资产自动化…

DataX从Mysql导数据到Hive分区表案例

0、下载DataX并解压到对应目录 DataX安装包&#xff0c;开箱即用&#xff0c;无需配置。 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分区…

vulnhub靶场——secarmy

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

labview硬件采集

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

openfeign与dubbo调用下载excel实践

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

ISP有感自发

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

web 自动化之 PO 设计模式详解

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

NVMe简介1

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

【python机器学习】Day 25 异常处理

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

数学建模初等模型应用

一、目的 掌握初等模型的建模方法,对简单的初等模型能借助Matlab工具软件进行辅助建模、求解和检验。 二、实验内容与设计思想&#xff08;设计思路、主要代码分析&#xff09; 1、预测鱼的质量 &#xff08;1&#xff09;设计思路&#xff1a;使用线性回归模型预测鱼的质量…

【MCP教程系列】SpringBoot 搭建基于 Spring AI 的 SSE 模式 MCP 服务

原文地址&#xff1a;https://developer.aliyun.com/article/1662946 在当今快速发展的AI技术背景下&#xff0c;如何高效地集成模型能力成为开发者关注的重点。本文将手把手教你如何基于 Spring AI 搭建支持 SSE&#xff08;Server-Sent Events&#xff09;模式的 MCP 服务 相…

利用散点图探索宇航员特征与太空任务之间的关系

利用散点图探索宇航员特征与太空任务之间的关系 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…

Qwen集成clickhouse实现RAG

一、RAG概要 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09; 是一种结合了信息检索技术与语言生成模型的人工智能技术。旨在通过检索相关文档来增强大模型的生成能力&#xff0c;从而提高预测的质量和准确性。RAG模型在生成文本或回答…

Excel分组计算求和的两种实现方案

文章目录 背景样例数据方案一、函数求和实现步骤缺点 方案二、数据透视表实现步骤优点 背景 在Excel文档中&#xff0c;经常会进行数据的求和计算&#xff0c;可使用不同的方式实现&#xff0c;记录下来&#xff0c;方便备查。 样例数据 已有商品销量信息&#xff0c;包含销…