CSDN原创图片链接失效分析

news/2024/11/27 19:30:33/

过年花了5个小时,把我的所有BLOG(200多篇)检查了一遍,更正了几十处图片链接失效。

1. 现象

几个月来,由于在写书,不停地回翻自己以前的文章。结果,不断发现大量辛辛苦苦绘制的图片打不开了,Markdown变成了下面的文字,这类Markdown 类似:

[外链图片转储失败,源站可能有防盗链机制,建议将图片保存下来直接上传(imgXXXXXXX)(https://img-blog.csdn.net/20180401221914791?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2dvbGRlbmhhd2tpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)]

请注意我的图片不是外链,是我自己上传到CSDN上去的图片。请看链接里就是CSDN的域名。我觉得应该有很多文章都受到了影响。肯定不止我一个人。CSDN应该因此损失了很多优秀的内容,作为认真写作的个人,也非常苦恼。

解决方法,是直接把网址复制出来,重新用Markdown语法写一遍:

![imgXXXXXXX](https://img-blog.csdn.net/20180401221914791)

幸好,所有图片其实都存在img-blog.csdn.net上,只是Markdown的文字被改废了。如果文件丢失,我就要疯了。要知道,有的图片是我用画图花了一上午绘制的,有的是半夜爆肝绘制的。而且,自己没有备份。

2.直接原因

直接原因是改变我博文的自动脚本读取不到图片。这种事故,应该是因为CSDN某次调整,要给全站的没有加水印的图片,加上CSDN的水印。结果,弄巧成拙,搞出了错误来了。

一般来说,要把没有加水印的图片加水印,有两种方法。一个是上传后立刻加水印,物理改变原始图片。另一个,是做成webService,在输送图片时,在线加。显然,根据URL来看,CSDN是第二种。在以前,很多Markdown里的图片,都没有水印。为了批量处理,就做了一个程序,搜索图片并添加。

为了正确读取图片的大小,我想自动添加水印的脚本应该会去直接访问这个图片。结果,却无法访问到,触发了异常。而后,替换器就认为这个网址是外链。我想,替换器直接采用了Markdown写作编辑器粘贴的代码,对这个异常做出了过激的响应,直接把原文改了。

3. 根本原因

3.1 没有遵循惰性法则

万不该因为一次链接不可访问,而替换原文本身。这一点如果遵守,应该可以避免失误。哪怕替换了,也应该留个备份。

3.2 缺少预判与测试

至少有以下原因,可能导致批处理访问CSDN自己的图片也失败:

  1. 正则表达式失误。鉴于不是所有图片都出故障,我猜是Markdown图片的替换字(【】内的文字)中的某些字符,恰好与用于匹配的RegExp碰撞了,导致程序提取到的Url不是完整而正确的网址,导致下载失败。
  2. 证书错误。由于CSDN是https的,如果在CSDN站内用局部域名或者IP地址替换URL,则会遇到证书SSL认证失败,Host 域名和证书不一致。当然这个太Low,基本不可能出现。
  3. 内网回环。在站内局域网内,使用域名反映的公网IP访问自己,需要进行内网回环。如果没有配置好,在站内的主机上,是访问不到外部的域名地址的。当然这个太Low,基本不可能出现。
  4. 符号失配。脚本生成URL时,/, " 等字符没有配对。导致URL失效。

但这些问题应该都能够预判和通过局部测试解决。如果是笔者操作一个拥有海量知识文章的大型数据池,而我有权限进行替换、删除,我会非常慌:慌的手都发抖。分享知识和经验,共享代码是善良、伟大、可贵的,要尊重与善待每一次分享。


http://www.ppmy.cn/news/19024.html

相关文章

C语言之程序设计概述

1.1.1 程序的概念 程序:算法 数据结构 程序设计方法 语言工具和环境数据结构:数据的类型和数据的组织方式算法:对数据操作的方法和步骤 1.1.2 程序设计语言的种类 第一代语言(机器语言):执行效率高、…

C++:类的构造函数与析构函数

目录 一.前言 二.类的构造函数 1.构造函数基本概念与语法细则 2.编译器默认生成的无参构造函数和自定义构造函数 3.构造函数的特性(可重载) 4.关于构造函数的注意事项 5.构造函数的应用示例: 三.类的拷贝构造函数 1.拷贝构造函数基本概念 2.编译器默认生成…

7.Java判断和循环+面试相关力扣算法题详解

提示: 文章目录前言一、顺序结构二、分支语句(1)if语句(2)switch语句*default的位置和省略:*case穿透*switch新特性*switch和if的第三种格式各自的使用场景三、循环结构1.分类2.for循环3.while循环4.for和while的对比:5.for和while循环的区别:6.练习:四、面试时的两…

深入浅出PyTorch_【01】pytorch基础

#深入浅出PyTorch_【01】pytorch基础 2023.01.23 主要内容就是张量 自动求导 pytorch pytorch为深度学习框架,与Tensorflow为最火的两个框架。开始我们的学习 2.1 张量 张量的英文是Tensor,它是PyTorch里面基础的运算单位,与Numpy的ndarra…

数据结构 最短路径课设(源码+实验报告+视频讲解)(不要钱、用了自取)

XIAN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 算法与数据结构 专 业: 班 级: 姓 名: 学 号: 实验学时: 指导…

Ubuntu显示优化 动画

之前从win转到了ubuntu。老大哥问我为啥不直接用Mac。我笑笑没说话。其实就一个字,穷。 使用Ubuntu的过程中有一点小问题,不过平时我主要用来编程,对壁纸,过渡动画这些东西其实并不是很在乎。直到我审美感爆棚的妻子告诉我&#…

【题解】2023牛客寒假算法基础集训营2

目录A. Tokitsukaze and abn (easy)思路B. Tokitsukaze and abn (medium)思路Tokitsukaze and abn (hard)思路D. Tokitsukaze and Energy Tree思路bfsdfsE. Tokitsukaze and Energy Tree思维F. Tokitsukaze and Gold Coins (easy)思路G. Tokitsukaze and Gold Coins (hard)H. T…

为什么会有右值引用?(移动构造、移动赋值)

目录 1、左值引用的缺陷 2、移动构造:解决临时对象的深拷贝 3、拓展:移动赋值 1、左值引用的缺陷 左值引用作为函数参数传递,减少了参数拷贝;但是作为函数返回值,并不适用于所有场景,比如要返回一个临…