当前位置: 首页 > article >正文

程序员必备:用GitHub免费搭建永久图床,VScode写Markdown再也不愁插图了

程序员专属图床方案用GitHub与VScode打造无缝写作体验作为一名长期与Markdown打交道的程序员我深知写作流程中那些看似微小却极其恼人的痛点。其中最典型的莫过于图片管理。无论是写技术博客、项目文档还是个人笔记插入图片后链接失效、加载缓慢、存储空间告急等问题总是如影随形。过去我尝试过各种云存储和付费图床要么担心服务商跑路要么受限于流量和费用始终无法找到一个既稳定、免费又完全自主可控的方案。直到我将目光投向几乎每天都在使用的GitHub。这个全球最大的代码托管平台其仓库的Issues、Releases乃至仓库本身都提供了稳定的文件托管能力。结合VScode这个程序员的主力编辑器我们完全可以构建一套零成本、永久可用、高度自动化的图床工作流。这不仅仅是把图片存到GitHub那么简单而是打造一个与你的Markdown写作深度集成、一键上传、链接自动生成的无感体验。本文将带你从零开始手把手搭建这套系统并深入探讨其背后的原理、最佳实践以及如何规避常见的“坑”。1. 图床方案的核心为什么是GitHub在深入配置之前我们有必要理解选择GitHub作为图床基石的底层逻辑。这关乎方案的长期稳定性和可靠性。免费与高可用性GitHub为每个用户提供充足的免费存储空间每个仓库推荐1GB以内但实际单个仓库可很大且有每月流量限制但对于个人图床绰绰有余。更重要的是GitHub拥有全球CDN加速图片访问速度有保障其服务稳定性远超市面上大多数免费图床。自主控制权你的图片数据完全掌握在自己手中存放在你自己的Git仓库里。没有第三方服务商突然修改规则、关闭服务或泄露数据的风险。你可以用Git工具自由地管理备份、恢复、迁移所有图片资源。与开发者工作流无缝融合图片以文件形式存储在代码仓库中这意味着你可以用对待代码的方式对待图片版本控制、分支管理、提交历史追溯。这对于需要精确版本管理的技术文档编写尤为有利。当然直接使用GitHub仓库存储图片并生成直链需要一点小技巧。GitHub本身并不直接提供图片外链服务但我们可以通过访问仓库中原始文件Raw的链接来达到目的。这个链接是永久有效的只要文件不被删除或仓库不设私有。注意虽然GitHub非常稳定但将其用于图床仍需遵守其服务条款避免滥用如存储大量与开源项目无关的媒体文件。个人博客、项目文档的配图属于合理使用范畴。2. 搭建基石创建专属的GitHub图床仓库万事开头难但这一步其实非常简单。我们将创建一个专门用于存放图片的GitHub仓库。登录GitHub点击右上角“”号选择“New repository”。填写仓库信息Repository name: 例如my-image-bed或blog-assets。名称最好清晰易懂。Description: 可选如“Personal image hosting for markdown writing”。公开Public或私有Private强烈建议创建公开仓库。私有仓库的原始文件链接需要访问令牌配置更复杂且在某些场景下如公开博客可能无法直接访问。公开仓库的图片链接是全网可访问的。初始化选项不要勾选“Add a README file”。我们从一个空仓库开始避免无关文件。点击“Create repository”完成创建。接下来我们需要生成一个访问令牌Token这是让PicGo等工具能够代表你向仓库上传文件的“钥匙”。点击GitHub右上角头像 -Settings。在左侧边栏最底部找到Developer settings。选择Personal access tokens-Tokens (classic)然后点击Generate new token (classic)。填写Note例如 “VScode PicGo Token”。选择过期时间对于图床可以选择“No expiration”永不过期但请注意保管好Token。勾选权限范围为了上传文件到仓库我们只需要repo权限。勾选它即可这包含了读写仓库内容的所有必要权限。滚动到页面底部点击Generate token。重要生成的Token只会显示一次请立即将其复制并保存到安全的地方如密码管理器。关闭页面后将无法再次查看。至此GitHub端的准备工作已经全部完成。我们得到了两个关键信息仓库地址https://github.com/你的用户名/仓库名个人访问令牌Token一串以ghp_开长的字符串。3. 连接器在VScode中配置PicGo插件VScode是我们的写作主战场而PicGo则是连接编辑器与GitHub图床的神奇桥梁。它负责监听剪贴板中的图片自动上传至配置好的图床并将Markdown格式的图片链接插入到光标处。3.1 安装与基础配置首先在VScode的扩展商店中搜索并安装PicGo插件作者是Spades。安装完成后你需要进行配置。打开VScode设置Ctrl,或Cmd,在搜索框中输入“PicGo”找到其配置项。关键的配置路径有两种方式图形化设置界面PicGo插件通常提供了相对友好的设置界面。直接编辑settings.json对于高级用户直接编辑配置文件更精确。按下CtrlShiftP(或CmdShiftP)输入“Open Settings (JSON)”并打开。我们将采用编辑settings.json的方式进行配置这样更清晰。在你的用户或工作区settings.json文件中添加或修改如下PicGo配置段{ picgo.configPath: , // 一般留空使用内置配置 picgo.customUploadName: ${fileName}, // 上传后保留原文件名 picgo.picBed.current: github, // 指定当前使用的图床为github picgo.picBed.github: { repo: 你的GitHub用户名/你的仓库名, // 例如 zhangsan/my-image-bed branch: main, // 仓库默认分支通常是main或master token: 你的GitHub Personal Access Token, // 前面生成的以ghp_开头的令牌 path: img/, // 图片在仓库中的存储路径如img/表示放在img目录下 customUrl: https://raw.githubusercontent.com/你的GitHub用户名/你的仓库名/main, // CDN加速自定义域名可选后文详述 message: Upload image by PicGo // 提交信息 } }参数详解repo格式必须为用户名/仓库名。branch填写你的仓库默认分支名。token粘贴你保存好的Token。path这是一个很好的组织习惯。设置一个如img/的路径所有图片都会上传到仓库的img文件夹下避免仓库根目录杂乱。你也可以按年/月进一步细分如img/2024/05/。customUrl这是可选项但强烈建议配置。默认的GitHub raw链接可能在某些网络环境下较慢。你可以将其替换为任何指向同一仓库的CDN加速域名如jsDelivr。例如https://cdn.jsdelivr.net/gh/你的GitHub用户名/你的仓库名main。配置后生成的图片链接将使用这个更快、更稳定的CDN地址。3.2 优化上传与使用体验配置完成后你可以立刻开始使用。默认的上传快捷键是Windows/Linux:Ctrl Alt UmacOS:Cmd Option U当你按下快捷键时PicGo会读取剪贴板中的图片数据例如你刚刚用截图工具截的图并复制自动完成上传并在当前编辑器的光标处插入类似以下的Markdown图片链接![图片描述](https://raw.githubusercontent.com/zhangsan/my-image-bed/main/img/20240527_chart.png)为了让体验更上一层楼我推荐进行以下优化1. 自定义上传文件名 上述配置中的${fileName}会保留图片原始名。你可能会想要一个更规范的命名比如包含时间戳以防重复。PicGo支持自定义变量。你可以将customUploadName改为picgo.customUploadName: ${year}${month}${day}-${hour}${minute}${second}-${fileName}这样生成的文件名会像20240527-143022-screenshot.png兼具唯一性和可读性。2. 使用更快的CDNjsDelivr 如前所述将customUrl设置为jsDelivr的地址可以显著提升图片加载速度尤其是在国内网络环境。jsDelivr是一个免费的开源CDN对GitHub仓库有很好的支持。customUrl: https://cdn.jsdelivr.net/gh/你的GitHub用户名/你的仓库名main配置后生成的链接将变为![图片描述](https://cdn.jsdelivr.net/gh/zhangsan/my-image-bedmain/img/20240527_chart.png)3. 搭配Snipaste等截图工具 我个人的黄金组合是SnipastePicGo。Snipaste的截图体验极佳并且可以设置快捷键在截图后自动复制到剪贴板。这样我只需要按一下截图快捷键再按一下PicGo上传快捷键图片就已经插入到Markdown中了全程几乎无需离开键盘。4. 高级管理与最佳实践搭建好基础工作流只是开始要让这套系统长期稳定、高效地服务还需要一些管理智慧和最佳实践。4.1 仓库图片的资产管理图片会随着时间积累。一个混乱的仓库会让你后期查找、管理或迁移图片变得异常困难。目录结构规划充分利用path配置。你可以根据项目、年份、文章类别来组织。/img /project-a /project-b /2024 /05-blog-posts /06-tutorial-screenshots /avatars /diagrams你甚至可以动态修改path配置来适应不同文章的需求虽然这需要手动调整设置。利用Git进行版本管理这是GitHub图床的隐藏优势。你可以定期在本地克隆你的图床仓库查看图片的提交历史。如果误删或需要找回旧版图片git log和git checkout就能轻松解决。这也是一种天然的备份机制。清理无用图片对于确实需要删除的图片务必谨慎。直接通过GitHub网页端或本地Git命令删除仓库中的图片文件会导致所有引用该图片的链接失效返回404。正确的做法是先在所有使用该图片的文档中替换或删除引用。再执行删除图片文件的操作。可以考虑写一个简单的脚本扫描你的Markdown文件找出所有未被引用的图片文件辅助清理。4.2 应对链接失效与迁移方案链接失效是图床最大的噩梦。我们的方案核心优势在于自主可控但也需要未雨绸缪。根本原因在我们的方案中链接失效通常只发生在两种情况下1) 图片在仓库中被移动或重命名2) 图片被删除3) 仓库被删除或设为私有。预防措施定好结构不要轻易改动一旦path和命名规则确定就不要频繁更改。谨慎操作仓库避免在GitHub网页端随意拖拽、重命名文件。任何文件路径的更改都应在本地通过Git操作完成并同步更新所有引用该文件的文档。备份配置你的PicGo配置尤其是Token和仓库信息非常重要。建议将其同步到你的密码管理器或安全的笔记中。迁移方案万一需要更换图床例如从GitHub迁移到其他平台由于所有图片链接都是集中、有规律可循的基于仓库地址和路径编写一个脚本来批量替换所有Markdown文件中的旧链接为新链接是完全可行的。这比使用分散的、链接规则不一的第三方图床要容易得多。4.3 性能与访问优化虽然GitHub和jsDelivr的全球访问性已经很好但如果你主要面向国内读者可能还会遇到加载缓慢的问题。使用国内优化的CDN除了jsDelivr可以探索其他同样支持GitHub的CDN服务或者使用Cloudflare等服务的缓存代理。图片压缩在上传前对图片进行压缩是提升加载速度最有效的方法。可以集成像tinypng这样的API到PicGo的工作流中或者养成用工具如Squoosh、ImageOptim手动压缩大图的习惯。一张几百KB的图片压缩到几十KB后对体验的提升是巨大的。懒加载Lazy Loading对于含有大量图片的长文档可以在Markdown渲染时启用图片懒加载。这属于前端优化范畴取决于你最终发布博客的平台或工具是否支持。5. 超越基础自动化与生态集成对于追求极致效率的开发者这套图床方案还可以玩出更多花样。1. 与静态博客生成器深度集成 如果你使用Hugo、Hexo、Jekyll等静态博客生成器你的图床仓库甚至可以就是博客源码仓库的一部分或者作为一个Git子模块引入。这样写作、图片管理、版本控制、部署完全一体化。在构建博客时图片链接已经是正确的相对或绝对路径。2. 命令行上传工具 除了VScode插件PicGo也提供了命令行工具PicGo-Core。这意味着你可以在任何编辑器如Neovim、Emacs或脚本中调用它来上传图片。例如你可以创建一个Alfred Workflow或Shell脚本将截图、上传、获取链接一步到位。3. 自定义图床开发 PicGo支持插件系统。如果你有特殊需求比如上传到公司内网存储完全可以基于PicGo-Core开发自己的图床插件。GitHub图床本身就是一个标准的PicGo插件实现源码可以作为很好的参考。4. 监控与告警 你可以编写一个简单的定时任务如GitHub Actions定期检查仓库中图片的访问状态返回码是否为200如果发现大量404则发送邮件或Slack通知提醒你可能存在链接失效问题。从在VScode里为一张配图折腾半天到如今快捷键一按图片秒传、链接即得这种流畅感彻底改变了我的技术写作体验。这套基于GitHub和PicGo的方案其魅力不在于用了多么高深的技术而在于它巧妙地用现有工具组合解决了一个真实、高频的痛点并且做到了免费、稳定、可控。它可能不是唯一解但经过我近两年的持续使用它无疑是综合成本、收益和可靠性后最适合程序员群体的方案之一。

相关文章:

程序员必备:用GitHub免费搭建永久图床,VScode写Markdown再也不愁插图了

程序员专属图床方案:用GitHub与VScode打造无缝写作体验 作为一名长期与Markdown打交道的程序员,我深知写作流程中那些看似微小却极其恼人的痛点。其中最典型的,莫过于图片管理。无论是写技术博客、项目文档,还是个人笔记&#xf…...

深入解析nn.TransformerEncoder:从原理到PyTorch实战

1. 从“注意力”说起:为什么Transformer是革命性的? 如果你接触过自然语言处理,或者看过一些AI新闻,肯定听过“Transformer”这个词。它现在几乎是所有大语言模型(比如我们熟悉的那些聊天机器人)的基石。但…...

【Cesium打造动态地球】从零构建3D地球可视化与交互式坐标转换系统

1. 从零开始:为什么选择Cesium来构建你的3D地球? 如果你对在网页上展示一个可以自由旋转、缩放,还能叠加各种数据的3D地球感兴趣,那么Cesium几乎是你绕不开的选择。我刚开始接触Web 3D可视化的时候,也试过其他一些库&a…...

Volcano 进阶实战:网络拓扑与负载感知调度的深度协同

1. 从单打独斗到并肩作战:为什么我们需要协同调度? 大家好,我是老张,在AI基础设施这块摸爬滚打了十来年,亲眼看着集群规模从几十台服务器膨胀到成千上万台。早期做模型训练,调度器只管一件事:把…...

【UE5】多用户协同编辑实战:从配置到实时协作

1. 环境准备与插件启用:迈出协同第一步 想和团队小伙伴一起在虚幻引擎5(UE5)里“搭积木”吗?就像在线文档可以多人同时编辑一样,UE5的多用户协同编辑功能(Multi-User Editing)让美术、策划、程…...

Orange Pi Zero 2拓展板:宽压供电、散热增强与USB多接口扩展设计

1. 项目概述 Orange Pi Zero 2 是一款基于 Rockchip RK3566 四核 Cortex-A55 架构 SoC 的紧凑型单板计算机,主频最高达 1.8GHz,集成 Mali-G52 GPU 与 4K 视频编解码能力,板载 1GB/2GB LPDDR4 内存及 eMMC 接口。其核心板尺寸仅为 48mm 46mm&…...

408计组存储系统大题实战:TLB与Cache的相爱相杀(2018真题44题解析)

408计组存储系统大题实战:TLB与Cache的相爱相杀(2018真题44题解析) 备考408,尤其是计算机组成原理,很多同学一看到存储系统就头疼。虚拟内存、TLB、Cache,这些概念单独理解已经不易,更别提它们在…...

让ai帮你决策,基于快马平台分析jdk版本选型并生成新特性示例代码

最近在规划一个新的微服务项目,技术栈选型时,在Java 11和Java 17这两个长期支持版本之间犯了难。这让我想起以前的做法:打开搜索引擎,在各个技术博客、官方文档和社区讨论之间反复横跳,对比特性、评估兼容性、权衡利弊…...

MCP Inspector 连接失败:深入解析 ‘Connection Error, is your MCP server running?‘ 的五大常见原因及应对策略

1. 服务器未启动:最基础却最易被忽略的“空城计” “Connection Error, is your MCP server running?” 这行报错,字面意思直白得不能再直白了:“你的MCP服务器在运行吗?” 我刚开始接触MCP Inspector时,看到这个错误…...

SmallThinker-3B-Preview模型安全性与内容过滤配置指南

SmallThinker-3B-Preview模型安全性与内容过滤配置指南 最近在帮几个朋友的公司部署内部AI助手,他们最关心的不是模型有多聪明,而是“它会不会乱说话”。这确实是个大问题,尤其是在开放给员工或客户使用的场景里。一个不小心,模型…...

Faiss 实战指南:从基础索引到高级应用

1. 初识Faiss:向量搜索的“超级引擎” 如果你正在处理海量的图片、文本或者音频数据,并且想快速找到其中相似的内容,那么你很可能已经遇到了“向量相似性搜索”这个难题。简单来说,就是把一段内容(比如一张猫的图片&am…...

Hi3861单芯片Wi-Fi智能开关设计与量产实践

1. 项目概述本项目实现了一款基于华为海思Hi3861芯片的Wi-Fi智能开关系统,面向物联网边缘控制场景,支持本地物理按键操作与远程HTTP指令控制双重交互模式。系统采用轻量级鸿蒙(OpenHarmony LiteOS-M内核)作为软件平台,…...

地理空间可视化崩溃频发,R 4.5中rgdal弃用后5步无缝迁移至sf+wk+geoarrow(含完整迁移检查清单)

第一章:地理空间可视化崩溃频发的根源诊断与R 4.5兼容性挑战地理空间可视化在R生态中长期依赖sf、sp、rgdal和mapview等核心包,但自R 4.5发布以来,多起不可恢复的段错误(segmentation fault)和GDAL驱动初始化失败案例集…...

拇指大小的射频功率计设计与宽量程实现原理

1. 项目概述对讲机射频功率计是一款面向业余无线电、应急通信及现场工程调试场景设计的便携式射频功率测量工具。其核心价值在于将传统实验室级功率测量能力压缩至拇指大小的物理封装内,实现从手台、车台到小型基站发射端口的快速、原位功率验证。该设备并非通用频谱…...

基于N32G430的USB供电参数监测终端设计

1. 项目概述本项目是一款基于国民技术N32G430C8L7微控制器的USB供电参数监测终端,集成了高精度电压/电流采集、实时功率计算与本地可视化显示功能。系统采用单板一体化设计,核心为N32G430C8L7——一款内置硬件乘除法器、支持多路高精度ADC与灵活时钟管理…...

快马平台AI助力:一分钟生成CentOS7的LNMP环境自动化部署脚本原型

最近在做一个Web项目的原型验证,需要快速搭建一个LNMP环境来测试一些功能。传统方式从安装系统到配置服务,步骤繁琐,耗时很长。这次我尝试用InsCode(快马)平台的AI能力,直接生成一个CentOS7下的自动化部署脚本,整个过程…...

DeepSeek-R1-Distill-Qwen-7B在新闻摘要生成中的实践

DeepSeek-R1-Distill-Qwen-7B在新闻摘要生成中的实践 1. 新闻摘要生成的痛点与解决方案 每天面对海量的新闻资讯,内容编辑和读者都面临同样的困境:信息过载、时间有限、关键信息难以快速捕捉。传统的人工摘要方式效率低下,一个编辑每小时可…...

老码农和你一起学AI系列:RNN循环神经网络

RNN(Recurrent Neural Network,循环神经网络)最好的方式,是把它和我之前聊过的N-grams以及Transformer放在一起,看成语言模型进化史上的关键中间环节。如果说N-grams是个“记忆力只有7秒的金鱼”(只看局部&…...

进站必看——关于博客内容的规划

你好,我的朋友,欢迎来到我的博客!我写博客的目的是通过博客的写作来沉淀我的技术,但聪明的朋友已经发现我的博客存在着一些问题:第一:博客内容杂乱。一会计网,一会C语言,一会就是一些…...

Kotlin泛型实战:从基础到高阶

Kotlin 泛型基础泛型允许在定义类、接口或函数时使用类型参数&#xff0c;从而提高代码的复用性和类型安全性。Kotlin 的泛型语法与 Java 类似&#xff0c;但提供了更灵活的特性。class Box<T>(val value: T)fun main() {val intBox Box(1) // 类型推断为 Box<…...

jQueryMobile网格

jQuery Mobile 网格系统介绍jQuery Mobile 提供了一套响应式网格系统&#xff0c;允许开发者通过简单的 HTML 结构和 CSS 类创建灵活的布局。网格系统基于百分比宽度&#xff0c;确保在不同屏幕尺寸上表现一致。基本网格结构jQuery Mobile 网格由行和列组成&#xff0c;每行默认…...

jQueryMobile导航栏

jQuery Mobile 导航栏基础导航栏是移动应用中常见的组件&#xff0c;用于在多个视图或页面间切换。jQuery Mobile 提供了 data-role"navbar" 属性来快速创建导航栏。基本结构如下&#xff1a;<div data-role"navbar"><ul><li><a href…...

YOLO 模型 端侧硬件部署 从0到1 完整实战流程

# YOLO 模型 端侧硬件部署 从0到1 完整实战流程 从模型下载 → 优化 → 剪枝 → 量化 → 转换 → 端侧部署 &#xff0c;包含所有命令、工具、采坑点。 适用于&#xff1a;RK3588 / Jetson / Android / ARM Linux / 嵌入式设备 一、整体流程总览-端侧部署标准5步 1. 原始模型获…...

钱币鉴定最全的书

在如今的收藏市场中&#xff0c;钱币收藏因其独特的历史文化价值和潜在的经济价值&#xff0c;受到了越来越多人的关注。然而&#xff0c;钱币鉴定却是一门专业性极强的学问&#xff0c;倘若没有一本好的学习资料&#xff0c;新手很容易在纷繁复杂的信息中迷失方向&#xff0c;…...

无锁队列设计

无锁队列设计 文章目录无锁队列设计1. 为什么需要无锁队列&#xff1f;2. 无锁编程基本概念2.1 阻塞&#xff08;Blocking&#xff09;、无锁&#xff08;Lock-Free&#xff09;与无等待&#xff08;Wait-Free&#xff09;2.2 无锁编程的挑战3. 无锁队列的分类4. SPSC环形缓冲区…...

收藏!2026大模型招聘真相:程序员必看,小白入门不踩坑

近两年来&#xff0c;大模型行业迎来爆发式增长&#xff0c;热度居高不下&#xff0c;无论是深耕传统技术领域的开发者&#xff08;Java、C、前端、数据开发、架构师&#xff09;&#xff0c;还是刚入门的技术小白&#xff0c;都在主动入局、内卷大模型相关技术&#xff0c;生怕…...

收藏!2026春招大厂AI岗位井喷,小白程序员必看的大模型人才机遇

未来是AI的&#xff0c;但归根结底是AI人才的——这句话在2026年春季校园招聘中&#xff0c;体现得淋漓尽致。今年的春招&#xff0c;早已不是简单的岗位竞争&#xff0c;而是一场围绕AI人才的“抢人大战”。截至目前&#xff0c;字节跳动、腾讯、百度、美团、蚂蚁集团等科技大…...

计算机复试上机C语言笔记(浙大第四版编程篇)

实验3-11 求一元二次方程的根运算优先级&#xff0c;注意加括号更改优先级 纯虚部就是只有虚部的&#xff0c;比如说2i&#xff0c;-2i这种&#xff0c;但是要注意题目可能还是需要输出0.002i这种实验4-1-1 统计数字字符和空格&#xff08;用switch&#xff09;switch&#xff…...

openclaw系列 | Windows部署指南

目录1、 系统环境依赖配置2、Windows系统全流程安装与初始化3、飞书配置4、常用命令参考文档1、 系统环境依赖配置 node -v git --version前置准备&#xff1a; 部署前请先确认电脑已安装以下基础工具&#xff1a; Node.js&#xff1a;需22.0及以上版本&#xff0c;用于运行Op…...

电子世界的奇妙冒险:18 动手做一个完整的智能小项目

👉18 动手做一个完整的智能小项目 咱们的电子科普系列从第1章的电阻电容基础,到二极管“三极管”的有源世界、运放的魔术、电源稳压、555定时器、数字逻辑、ADC/DAC、集成电路进化、传感器感知、执行器行动、无线通信、显示交互……一路走来,你已经从“小白”变身“硬件达…...