【小技巧】CSDN中图片转存失败怎么处理

问题背景

有些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"})

这样,就不会出现转存失败的情况了,而且原来的比较大的一点的图片也可以转存成功

猜你喜欢

转载自blog.csdn.net/weixin_44505587/article/details/115415163