问题背景
有些markdown笔记写在本地电脑上,当直接复制发布到CSDN中时,CSDN会将markdown中的图片链接全部转存
如果图片过大或者图片过多就会出现转存失败的情况
一种解决方法
分析
CSDN图片转存后得到的网址是这样的
https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWctaG9tZS5jc2RuaW1nLmNuL2ltYWdlcy8yMDIwMTEyNDAzMjUxMS5wbmc
网址的基本格式是https://imgconvert.csdnimg.cn/<base64>
,后面的一长串编码其实就是图片原网址的base64编码
思路
自己写了个nodejs
代码,将网址转换为base64编码,自动生成转存网址就行了
const fs = require("fs");
/**
* 生成转存后的图片网址
*/
function getImgConvertUrl({
url=""}){
let buffer = Buffer.from(url);
let base64 = buffer.toString("base64");
if(base64.endsWith("=")){
base64 = base64.replace(/={1,2}$/,"");
}
let newUrl = "https://imgconvert.csdnimg.cn/"+base64
return newUrl;
}
/**
* 处理markdown文件
* srcMdPath: 原markdown路径
* dstMdPath: 转换后的markdown路径
*/
function convertMd({
srcMdPath, dstMdPath}){
// 读取原markdown
const md = fs.readFileSync(srcMdPath, {
encoding:"utf8"});
// 匹配markdown的图片语法![]()
const imgReg =/!\[(.*?)\]\(([^()]*)\)/g
const newMd = md.replace(imgReg, function(_, name, url){
// 更改图片的网址
return `![${
name}](${
getImgConvertUrl({
url})})`
})
// 写入新的markdown
fs.writeFileSync(dstMdPath, newMd);
}
srcMdPath = "./mdContent.md"
convertMd({
srcMdPath, dstMdPath:"./mdContent_imgconverted.md"})
这样,就不会出现转存失败的情况了,而且原来的比较大的一点的图片也可以转存成功