You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

20 lines
24 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="x-dns-prefetch-control" content="on"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="renderer" content="webkit"><meta name="force-rendering" content="webkit"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="HandheldFriendly" content="True"><meta name="mobile-web-app-capable" content="yes"><link rel="shortcut icon" href="https://hans362-img.oss.0vv0.top/favicon.ico"><link rel="icon" type="image/png" sizes="16x16" href="https://hans362-img.oss.0vv0.top/favicon-16x16.png"><link rel="icon" type="image/png" sizes="32x32" href="https://hans362-img.oss.0vv0.top/favicon-32x32.png"><link rel="apple-touch-icon" sizes="180x180" href="https://hans362-img.oss.0vv0.top/apple-touch-icon.png"><link rel="mask-icon" href="https://hans362-img.oss.0vv0.top/safari-pinned-tab.svg"><title>在 MWeb 中优雅地使用 GitHub + JsDelivr 图床 | Hans362 &#39;s Blog</title><meta name="keywords" content="Web, Serverless, Vercel, GitHub, MWeb, 图床, Hans362"><meta name="description" content="一直以来我都使用 iPad 作为主要的写作工具,得益于 Working Copy + MWeb 的神仙组合,我可以在 iPad 上非常便捷地完成博客文章的写作、推送,然后交给 GitHub Actions 完成静态博客自动构建(没错,我把慢吞吞的 Travis CI 换掉了)。 MWeb 作为一款非常优秀的 iOS&#x2F;macOS 端 MarkDown 编辑器,其内置了强大的图片上传功能(也就是俗称的"><meta property="og:type" content="article"><meta property="og:title" content="在 MWeb 中优雅地使用 GitHub + JsDelivr 图床"><meta property="og:url" content="https://blog.hans362.cn/post/use-github-as-picbed-in-mweb/"><meta property="og:site_name" content="Hans362 &#39;s Blog"><meta property="og:description" content="一直以来我都使用 iPad 作为主要的写作工具,得益于 Working Copy + MWeb 的神仙组合,我可以在 iPad 上非常便捷地完成博客文章的写作、推送,然后交给 GitHub Actions 完成静态博客自动构建(没错,我把慢吞吞的 Travis CI 换掉了)。 MWeb 作为一款非常优秀的 iOS&#x2F;macOS 端 MarkDown 编辑器,其内置了强大的图片上传功能(也就是俗称的"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://hans362-img.oss.0vv0.top/2021/03/06/31140885.jpg?width=1920"><meta property="article:published_time" content="2021-03-06T08:46:07.000Z"><meta property="article:modified_time" content="2025-04-11T10:35:15.359Z"><meta property="article:author" content="Hans362"><meta property="article:tag" content="Web"><meta property="article:tag" content="Serverless"><meta property="article:tag" content="Vercel"><meta property="article:tag" content="GitHub"><meta property="article:tag" content="MWeb"><meta property="article:tag" content="图床"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://hans362-img.oss.0vv0.top/2021/03/06/31140885.jpg?width=1920"><link rel="stylesheet" href="/css/style/main.css"><link rel="stylesheet" id="hl-default-theme" href="https://blog.hans362.cn/npm/highlight.js@10.1.2/styles/atom-one-light.css" media="none"><link rel="stylesheet" id="hl-dark-theme" href="https://blog.hans362.cn/npm/highlight.js@10.1.2/styles/atom-one-dark.css" media="none"><script src="/js/darkmode.js"></script><link rel="dns-prefetch" href="https://analytics.0vv0.top"><link rel="preconnect" href="https://hans362-img.oss.0vv0.top"><meta name="generator" content="Hexo 7.1.1"><link rel="alternate" href="/atom.xml" title="Hans362 's Blog" type="application/atom+xml"></head><body><div class="app-shell-loader">加载中...</div><div class="container" tabindex="-1"><header><div class="header__left"><a href="/" class="button"><span class="logo__text">Hans362 &#39;s Blog</span></a></div><div class="header__right"><div class="navbar__menus"><a href="/" class="button"><div class="navbar-menu">首页</div></a><a href="/archives/" class="button"><div class="navbar-menu">归档</div></a><a href="/tags/" class="button"><div class="navbar-menu">标签</div></a><a href="/bangumi/" class="button"><div class="navbar-menu">追番</div></a><a href="/links/" class="button"><div class="navbar-menu">友链</div></a><a href="/about/" class="button"><div class="navbar-menu">关于</div></a><a href="/atom.xml" class="button"><div class="navbar-menu">RSS</div></a></div><a href="/search/" class="button"><div id="btn-search"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="24" height="24" fill="currentColor" stroke="currentColor" stroke-width="32"><path d="M192 448c0-141.152 114.848-256 256-256s256 114.848 256 256-114.848 256-256 256-256-114.848-256-256z m710.624 409.376l-206.88-206.88A318.784 318.784 0 0 0 768 448c0-176.736-143.264-320-320-320S128 271.264 128 448s143.264 320 320 320a318.784 318.784 0 0 0 202.496-72.256l206.88 206.88 45.248-45.248z"></path></svg></div></a><a href="javaScript:void(0);" rel="external nofollow noreferrer" class="button"><div id="btn-toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></div></a><a href="#" class="button" id="b2t" aria-label="回到顶部" title="回到顶部"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" width="32" height="32"><path d="M233.376 722.752L278.624 768 512 534.624 745.376 768l45.248-45.248L512 444.128zM192 352h640V288H192z" fill="currentColor"></path></svg> </a><a class="dropdown-icon button" tabindex="0"><div id="btn-dropdown"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="24" height="24" fill="none" stroke="currentColor" stroke-width="0.7" stroke-linecap="round" stroke-linejoin="round"><path fill="currentColor" d="M3.314,4.8h13.372c0.41,0,0.743-0.333,0.743-0.743c0-0.41-0.333-0.743-0.743-0.743H3.314c-0.41,0-0.743,0.333-0.743,0.743C2.571,4.467,2.904,4.8,3.314,4.8z M16.686,15.2H3.314c-0.41,0-0.743,0.333-0.743,0.743s0.333,0.743,0.743,0.743h13.372c0.41,0,0.743-0.333,0.743-0.743S17.096,15.2,16.686,15.2z M16.686,9.257H3.314c-0.41,0-0.743,0.333-0.743,0.743s0.333,0.743,0.743,0.743h13.372c0.41,0,0.743-0.333,0.743-0.743S17.096,9.257,16.686,9.257z"></path></svg></div></a><div class="dropdown-menus" id="dropdown-menus"><a href="/" class="dropdown-menu button">首页</a> <a href="/archives/" class="dropdown-menu button">归档</a> <a href="/tags/" class="dropdown-menu button">标签</a> <a href="/bangumi/" class="dropdown-menu button">追番</a> <a href="/links/" class="dropdown-menu button">友链</a> <a href="/about/" class="dropdown-menu button">关于</a> <a href="/atom.xml" class="dropdown-menu button">RSS</a></div></div></header><cover></cover><main><div class="post-content"><div class="post-title"><h1 class="post-title__text">在 MWeb 中优雅地使用 GitHub + JsDelivr 图床</h1><div class="post-title__meta"><a href="/archives/2021/03/" class="post-meta__date button">2021-03-06</a> <span class="separate-dot"></span> <a href="/categories/%E6%8A%80%E6%9C%AF%E5%90%91/" class="button"><span class="post-meta__cats">技术向</span></a><style>.post-meta__pv{color:var(--t-l);visibility:hidden;opacity:0;transition:.2s}</style><span class="separate-dot"></span> <span class="post-meta__pv"></span></div></div><aside class="post-side"><div class="post-side__toc"><div class="toc-title">文章目录</div><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E8%A8%80"><span class="toc-text">前言</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AE%9E%E7%8E%B0%E6%80%9D%E8%B7%AF"><span class="toc-text">实现思路</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BB%A3%E7%A0%81%E7%BC%96%E5%86%99"><span class="toc-text">代码编写</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9C%80%E7%BB%88%E6%95%88%E6%9E%9C"><span class="toc-text">最终效果</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5"><span class="toc-text">参考链接</span></a></li></ol></div></aside><a class="btn-toc button" id="btn-toc" tabindex="0"><svg viewBox="0 0 1024 1024" width="32" height="32" xmlns="http://www.w3.org/2000/svg"><path d="M128 256h64V192H128zM320 256h576V192H320zM128 544h64v-64H128zM320 544h576v-64H320zM128 832h64v-64H128zM320 832h576v-64H320z" fill="currentColor"></path></svg></a><div class="toc-menus" id="toc-menus"><div class="toc-title">文章目录</div><ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%89%8D%E8%A8%80"><span class="toc-text">前言</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%AE%9E%E7%8E%B0%E6%80%9D%E8%B7%AF"><span class="toc-text">实现思路</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E4%BB%A3%E7%A0%81%E7%BC%96%E5%86%99"><span class="toc-text">代码编写</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E6%9C%80%E7%BB%88%E6%95%88%E6%9E%9C"><span class="toc-text">最终效果</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5"><span class="toc-text">参考链接</span></a></li></ol></div><article class="post post__with-toc card"><div class="post__header"><img alt="Cover Image" class="lazy" src="https://hans362-img.oss.0vv0.top/2021/03/06/31140885.jpg?width=1920" srcset="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAABlBMVEXMzMyWlpYU2uzLAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNgAAAAAgAB9HFkpgAAAABJRU5ErkJggg==" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/06/31140885.jpg?width=1920"><div class="post__expire" id="post-expired-notify"><p><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" style="fill:#f5a623;stroke:#f5a623"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg> 本文最后更新于 <span id="expire-date"></span> 天前,文中部分描述可能已经过时。</p></div><script>(()=>{var e=Date.parse("2021-03-06"),t=(new Date).getTime(),t=Math.floor((t-e)/864e5);120<=t&&(document.querySelectorAll("#expire-date")[0].innerHTML=t,document.querySelectorAll("#post-expired-notify")[0].style.display="block")})()</script></div><div class="post__content"><html><head><script>var meting_api="https://api-v2.hans362.cn/vip/?server=:server&type=:type&id=:id&r=:r"</script><script class="meting-secondary-script-marker" src="/js/Meting.min.js"></script></head><body><p>一直以来我都使用 iPad 作为主要的写作工具,得益于 Working Copy + MWeb 的神仙组合,我可以在 iPad 上非常便捷地完成博客文章的写作、推送,然后交给 GitHub Actions 完成静态博客自动构建(没错,我把慢吞吞的 Travis CI 换掉了)。</p><p>MWeb 作为一款非常优秀的 iOS/macOS 端 MarkDown 编辑器,其内置了强大的图片上传功能(也就是俗称的“图床”),可对接许多知名图床平台的 API 以及各大云计算平台的对象存储服务,写文章时可快速插入图片,省去了手动上传的过程。</p><p><img src="https://hans362-img.oss.0vv0.top/2021/03/06/35259822.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/06/35259822.jpg?width=1920" srcset="/loading.gif" alt=""></p><p>最近我<s>吃饱了撑的</s>把博客的图片全部从腾讯云 COS 迁移到了 GitHub并使用 JsDelivr CDN 进行全球加速,然而从上图中可知 MWeb 并未提供 GitHub 的图床接口,这可咋办呢?经过一番摸索,我找到了这个我自认为还不错的解决方案。</p><span id="more"></span><h2 id="前言"><a class="markdownIt-Anchor" href="#前言"></a> 前言</h2><p>首先需要声明的是,关于能否使用 GitHub + JsDelivr 作为图床(即是否有违 JsDelivr 的用户协议)目前仍存争议,我个人认为作为开发者合理使用是没有问题的,但坚决反对滥用行为(指作为个人网盘、作为下载站等行为)。</p><p>关于 MWeb 如何与 GitHub 联动的问题,其实并不是只有我一个人遇到了,在我写这篇文章之前就已经<a target="_blank" rel="noopener" href="https://www.jianshu.com/p/3eaba5fcc65f">有人</a>给出了解决方案,但是不能很好地满足我的需求,所以我就又写了这篇文章来记录。</p><h2 id="实现思路"><a class="markdownIt-Anchor" href="#实现思路"></a> 实现思路</h2><p>MWeb 虽然不支持直接添加 GitHub 图床,但是提供了「自定义图床」的选项,设置页面长这样:</p><p><img src="https://hans362-img.oss.0vv0.top/2021/03/06/35232978.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/06/35232978.jpg?width=1920" srcset="/loading.gif" alt=""></p><p>根据这个页面可知MWeb 通过 POST 请求把图片发送到自定义图床接口,图床接口返回图片上传的成功与否以及图片的相对路径或绝对路径。而 GitHub API 接口需要使用 PUT 方法上传文件,因此不能直接拿来用。</p><p>上文提到过的<a target="_blank" rel="noopener" href="https://www.jianshu.com/p/3eaba5fcc65f">这篇文章</a>给出了思路,即通过搭建一个类似于桥接器的服务,将 MWeb 发过来的 POST 请求转化为 PUT 请求再发送给 GitHub就可以很好地解决这个问题。美中不足的是该方案需要在本机上开机启动跑 Node.js 服务,而 iPad 根本就不可能做到,而且图片是直接传到根目录的,不符合我按日期分类的习惯,且返回给 MWeb 的图片链接是 GitHub 原始的绝对路径。</p><p>好在我又想到了 Vercel貌似已经是第二次登场了23333直接写个 Function 丢上去跑着就可以不用本地跑 Node.js 了,至于图片上传的目录可以通过修改代码实现,用 Moment.js 按日期分类图片,返回的路径也可以修改代码让其返回相对路径,最后由于服务是跑在远端向所有人公开的,所以需要设计一个鉴权流程防止仓库被别人恶意传图。</p><h2 id="代码编写"><a class="markdownIt-Anchor" href="#代码编写"></a> 代码编写</h2><p>由于整体框架和<a target="_blank" rel="noopener" href="https://www.jianshu.com/p/3eaba5fcc65f">这篇文章</a>差不多,我就直接 Fork 过来用了,省得造轮子。</p><p>(下文提到的代码都放在<a target="_blank" rel="noopener" href="https://github.com/hans362/PicBed4MWeb">这个仓库</a></p><p>首先要适配 Vercel遂建立<code>/api</code>目录,把原本位于根目录下的<code>index.js</code><code>helper.js</code>挪动至此,修改<code>index.js</code>中的路由,同时不能再把配置写在文件里了,应当直接从环境变量中读取。</p><p><code>index.js</code>中:</p><pre><code class="hljs diff"><span class="hljs-deletion">- const config = require('./config.json')</span>
<span class="hljs-deletion">- const url = config.url || '/upload'</span>
<span class="hljs-deletion">- var port = config.port || 8080</span>
<span class="hljs-addition">+ const url = process.env.URL || '/api'</span>
<span class="hljs-addition">+ var port = process.env.PORT || 8080</span></code></pre><p><code>helper.js</code>中:</p><pre><code class="hljs diff"><span class="hljs-deletion">- const config = require('./config.json')</span>
<span class="hljs-deletion">- const {repo, token} = config</span>
<span class="hljs-addition">+ const repo = process.env.REPO</span>
<span class="hljs-addition">+ const token = process.env.TOKEN</span></code></pre><p>为了实现按日期分类,同时图片随机命名,需要修改<code>upload.js</code>中的相关代码。</p><pre><code class="hljs diff"><span class="hljs-deletion">- let timestamp = moment().format('YYYYMMDDHHmmss')+'.jpg'</span>
<span class="hljs-deletion">- let imageUrl = 'https://api.github.com/repos/'+repo+'/contents/'+timestamp</span>
<span class="hljs-addition">+ let timestamp = moment().format('YYYY/MM/DD/')+Math.round(Math.random()*100000000)+'.jpg'</span>
<span class="hljs-addition">+ let imageUrl = 'https://api.github.com/repos/'+repo+'/contents/'+timestamp</span></code></pre><p>同时需要使其返回相对路径而非 GitHub 原始绝对路径。</p><pre><code class="hljs diff"><span class="hljs-deletion">- return imgUrl</span>
<span class="hljs-addition">+ return timestamp</span></code></pre><p>最后加入鉴权机制,即校验 POST 请求中的 SECRET通信密钥字段是否与环境变量一致</p><pre><code class="hljs stylus"><span class="hljs-keyword">if</span> (fields<span class="hljs-selector-class">.secret</span> != process<span class="hljs-selector-class">.env</span>.SECRET) {
res<span class="hljs-selector-class">.writeHead</span>(<span class="hljs-number">200</span>, {
<span class="hljs-string">"Content-Type"</span>: <span class="hljs-string">"text/json"</span>,
<span class="hljs-string">'Access-Control-Allow-Origin'</span>: <span class="hljs-string">'*'</span>
}) res<span class="hljs-selector-class">.write</span>(JSON<span class="hljs-selector-class">.stringify</span>({
status: <span class="hljs-string">'false'</span>,
info: <span class="hljs-string">'Secret key invalid.'</span>
})) res<span class="hljs-selector-class">.end</span>() return
}</code></pre><p>至此就已经基本完成改造了,推送部署到 Vercel 上,在 MWeb 中可以添加自定义图床进行测试。</p><p><img src="https://hans362-img.oss.0vv0.top/2021/03/06/89900351.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/06/89900351.jpg?width=1920" srcset="/loading.gif" alt=""></p><p>点击「验证设置」,成功!</p><p><img src="https://hans362-img.oss.0vv0.top/2021/03/06/11573806.jpg?width=1920" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/06/11573806.jpg?width=1920" srcset="/loading.gif" alt=""></p><h2 id="最终效果"><a class="markdownIt-Anchor" href="#最终效果"></a> 最终效果</h2><p><img src="https://hans362-img.oss.0vv0.top/2021/03/Photo%20Mar%206%2C%2015%2032%2027.gif" class="lazy" data-srcset="https://hans362-img.oss.0vv0.top/2021/03/Photo%20Mar%206%2C%2015%2032%2027.gif" srcset="/loading.gif" alt=""></p><h2 id="参考链接"><a class="markdownIt-Anchor" href="#参考链接"></a> 参考链接</h2><ol><li><a target="_blank" rel="noopener" href="https://www.jianshu.com/p/3eaba5fcc65f">https://www.jianshu.com/p/3eaba5fcc65f</a></li></ol></body></html></div><div class="license"><div class="license-title">在 MWeb 中优雅地使用 GitHub + JsDelivr 图床</div><div class="license-link"><a href="https://blog.hans362.cn/post/use-github-as-picbed-in-mweb/">https://blog.hans362.cn/post/use-github-as-picbed-in-mweb/</a></div><div class="license-meta"><div class="license-meta-item"><div class="license-meta-title">本文作者</div><div class="license-meta-text">Hans362</div></div><div class="license-meta-item"><div class="license-meta-title">最后更新</div><div class="license-meta-text">2021-03-06</div></div><div class="license-meta-item"><div class="license-meta-title">许可协议</div><div class="license-meta-text"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh" rel="nofollow noopener noreferrer" target="_blank">CC BY-NC-SA 4.0</a></div></div></div><div>转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!</div></div><div class="post-footer__cats"><a href="/categories/%E6%8A%80%E6%9C%AF%E5%90%91/" class="post-cats__link button">技术向</a><a href="/tags/Web/" class="post-tags__link button"># Web</a><a href="/tags/Serverless/" class="post-tags__link button"># Serverless</a><a href="/tags/Vercel/" class="post-tags__link button"># Vercel</a><a href="/tags/GitHub/" class="post-tags__link button"># GitHub</a><a href="/tags/MWeb/" class="post-tags__link button"># MWeb</a><a href="/tags/%E5%9B%BE%E5%BA%8A/" class="post-tags__link button"># 图床</a></div></article><div class="nav"><div class="nav__prev"><a href="/post/2021-shanghai-cee-geo-bio/" class="nav__link"><div><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M589.088 790.624L310.464 512l278.624-278.624 45.248 45.248L400.96 512l233.376 233.376z" fill="#808080"></path></svg></div><div><div class="nav__label">上一篇</div><div class="nav__title">2021年上海高中地理/生物等级考大吐槽</div></div></a></div><div class="nav__next"><a href="/post/bilibili-bangumi-js/" class="nav__link"><div><div class="nav__label">下一篇</div><div class="nav__title">【项目发布】Bilibili-Bangumi-JS</div></div><div><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="24" height="24"><path d="M434.944 790.624l-45.248-45.248L623.04 512l-233.376-233.376 45.248-45.248L713.568 512z" fill="#808080"></path></svg></div></a></div></div><div class="post__sponsers card"><div class="sponser-label">喜欢这篇文章吗?考虑支持一下作者吧~</div><a class="sponser-button button" href="https://afdian.net/@hans362" rel="external nofollow noreferrer" target="_blank" data-type="afdian">爱发电</a> <a class="sponser-button button" data-type="alipay">支付宝<img class="sponser-qrcode" src="https://hans362-img.oss.0vv0.top/2021/08/05/68281340.jpg"></a></div><div class="post__comments post__with-toc card" id="comment"><h4>评论</h4><div id="disqus_thread">您所在的地区可能无法访问 Disqus 评论系统,请切换网络环境再尝试。</div></div></div></main><footer><p class="footer-copyright">Copyright © 2017&nbsp;-&nbsp;2025 <a href="/">Hans362 &#39;s Blog</a></p><p>Powered by <a href="https://hexo.io" target="_blank">Hexo</a> | Theme - <a href="https://github.com/ChrAlpha/hexo-theme-cards" target="_blank">Cards</a></p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script><ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8746554831230893" data-ad-slot="6356225601" data-ad-format="auto" data-full-width-responsive="true"></ins><script>(adsbygoogle=window.adsbygoogle||[]).push({})</script></footer></div><script defer src="https://blog.hans362.cn/npm/vanilla-lazyload@17.8.3/dist/lazyload.min.js"></script><script>window.lazyLoadOptions={elements_selector:".lazy"}</script><script async defer data-website-id="5d181692-8a81-4c20-a282-cee87a6b90ef" src="https://analytics.0vv0.top/vue.js"></script><script src="/js/pageviews.js"></script><link rel="stylesheet" href="https://blog.hans362.cn/npm/katex@0.16.0/dist/katex.min.css" crossorigin="anonymous"><script>function loadComment(){let e,n;(e=document.createElement("script")).src="https://blog.hans362.cn/js/disqus.js",document.body.appendChild(e),e.onload=()=>{new DisqusJS({shortname:"hans362-s-blog",siteName:"Hans362 &#39;s Blog",api:"https://api-v3.hans362.cn/",apikey:"8Z1UVT4UOk22yNyk9MhpqQ0FLb27Hb1bpV066b4v9zOFie0GQ6VCoJ9TJwoGlCVF",admin:"hans362",identifier:"post/use-github-as-picbed-in-mweb/",url:"https://blog.hans362.cn/post/use-github-as-picbed-in-mweb/",nesting:"4"})},(n=document.createElement("link")).rel="stylesheet",n.href="https://blog.hans362.cn/css/disqusjs.css",document.head.appendChild(n)}var runningOnBrowser="undefined"!=typeof window,isBot=runningOnBrowser&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro|msn)bot|crawl|spider|yand|duckgo/i.test(navigator.userAgent),supportsIntersectionObserver=runningOnBrowser&&"IntersectionObserver"in window;setTimeout(function(){var n;!isBot&&supportsIntersectionObserver?(n=new IntersectionObserver(function(e){e[0].isIntersecting&&(loadComment(),n.disconnect())},{threshold:[0]})).observe(document.getElementById("comment")):loadComment()},1)</script></body></html>