java:将md⽂档中的本地图⽚批量上传到图床(多种⽅法,简单好⽤)
本⽂总共讲了两种上传⽅法
第⼀种适合喜欢捣⿎⼀些东西的码友,主要是使⽤java实现的,需要本地有java环境
第⼆种⽆需任何环境,只要有图床即可,操作⽐⽅法⼀简单很多
⽂章⽬录
⽅法⼀
絮絮叨叨
先扯扯我为什么要写这个脚本以及主要思路,如果不感兴趣的话可以跳到后⾯直接看如何使⽤,如果时间不紧的话还是看看吧,⽅便了解⼀下思路
在最近整理笔记发博客的时候碰到了⼀个很⼤的问题,我在平常记笔记的时候设置typora的上传模式为复制到./${filename}.assets⽂件夹。
这就导致我如果想发博客的话需要将⾥⾯的图⽚⼀张张再上传到图床上,然后修改md⽂档中的链接格式,
⽽在md⽂档中有两种图⽚的链接⽅式,
第⼀种是<img src="aa.assets/image-164400904.png" alt="image-164400904" />,这种是在添加图⽚是加了缩放,然后格式变成了html的img标签
第⼆种是![image-2122818](aa.assets/image-122818.png),这种是直接复制照⽚进去的格式
在我的摸索下发现如果把typora的图⽚图⽚操作设置为上传图⽚的话,对于第⼆种格式的图⽚链接,选中这个链接,然后ctrl+x,然
后ctrl+v就会⾃动上传了,但是对于第⼀种格式的链接这种⽅法就没⽤。
然后这个时候我就⽤出来了我的第⼀种⽅法,从图⽚的⽂件夹⾥⾯到对应的图然后⼀张⼀张地再复制进⽂档中,刚开始还觉得挺机灵的,然后到后⾯就意识到了问题的严重性,记的笔记每个⽂档基本就30+张图⽚,这么做效率也实在是太低了。
于是我就萌⽣了写⼀个脚本的想法,初始的想法只是写⼀个脚本把第⼀种格式的图⽚链接转换为第⼆种格式的,然后可以直接在⽂档中操作就⾏了,不⽤⼀张⼀张去图⽚,然后⽤了两三个⼩时,学了学java⽂件输⼊输出,正则表达式解析,然后完成了第⼀版的脚本,刚开始⽤着还挺舒服,速度挺快,但是感觉我都写脚本了,为什么不直接⼀步到位,直接把他上传到图床去呐。
然后就是⼀阵琢磨,然后发现使⽤的picGo还有⼀个内核版本,然后是使⽤命令⾏上传图⽚,那我不就可以直接java调⽤cmd控制台然后使⽤命令将图⽚上传然后获得上传后的图⽚路径,再将这个路径替换到md⽂件中,不就节省了很多⼯作量吗,说⼲就⼲,然后⼜⽤了两个多⼩时,学习了⼀下java如何直接调⽤cmd的命令,并获取 cmd的输出,然后写完了第⼆版的脚本。
第⼆版相⽐第⼀版来说就⾮常舒服了,我只需要修改⼀下⽂件所在路径以及⽂件保存路径,然后就等程序运⾏结束,就可以获得到⼀个路径全部替换成图床的md⽂档了,这时候就可以直接cv进博客然后发布了。
但是⽤这个写了⼏篇之后⼜出了问题,我如果处理⼀个有50多个图⽚的⽂档光调⽤picGo上传图⽚就需要⼀分钟,虽然很短,但是我还是懒得等,然后就⼜想修改了,我再仔细想想,我的图床是放在Gitee上的,那我是不是直接可以把仓库拉倒本地,然后将扫描到的图⽚存到本地仓库中,md⽂档中直接替换为上传后的图床地址然后保存,最后只需要将本地仓库的东西提交到远程仓库即可,然后就开始改代码,同时还新加了可以直接⾃动扫描⼀个⽂件夹中的所有md后缀⽂件并处理(包扩⼦⽂件夹)的功能。
于是就有了最终版本了,⽀持两种上传模式,⼀种是直接上传的,另⼀种是上传到本地仓库然后再提交,同时也可以⾃定义处理后的⽂件的输出路径,到现在为⽌就算是得到⼀个我⽐较满意的版本了。
最终经过我的实测处理我⼤三上的所有笔记⽂件,也就⽤了两三秒,算上提交仓库也就⽤了两分钟⽽已,可以说在性能上还是很不错的,处理的⽂件数量和图⽚数量以及输出的⽂件夹如下图,可以看到效果还是很不错的
使⽤⽅法
接下来说⼀下他的使⽤⽅法
使⽤下⾯命令将项⽬拉倒本地
git clone gitee/hydrogenion/md-image-auto-upload.git
修改Main.java中下列路径为本地对应路径,如果⽂件中其他格式的⽂件记得在最后⼀项imgSuffix中加⼊该图⽚的后缀,例如.bmp 图⽚存储路径和⽂件输出路径最后⾯记得加双反斜线
// 需要处理的⽂件所在⽂件夹,⾃动检索⼦⽂件夹
public static String basePath ="D:\\⼤三上";
// ⾮直接上传模式照⽚存储路径(本地git仓库的路径)
public static String imgStorePath ="D:\\drawing-bed-two\\img\\";
// ⾮直接上传模式照⽚上传后访问的前缀
public static String imgUploadPrefix ="gitee/hydrogenion/drawing-bed-two/raw/master/img/";
// 处理后的⽂件输出路径
public static String fileStorePath ="D:\\blogs\\笔记\\笔记汇总\\";
// 上传⽂件的命令,需要再拼接⽂件路径,这⾥使⽤的picGo-core,也可以使⽤其他的上传⼯具
public static String uploadCommand ="cmd /d/s/c C:\\Users\\tux\\AppData\\Roaming\\Typora\\picgo\\win64\\ u ";
// 需要检测的图⽚后缀
时间正则表达式javapublic static String[] imgSuffix ={".png","jpg","jpeg"};
picGo-core的配置⽅法请参考
上传后的照⽚前缀为除⽂件名的其他部分
如果为模式⼀,程序运⾏完成即可在⽣成的⽂件中预览
如果为模式⼆,需要进⼊本地git仓库中push后才可在⽣成的⽂件中正常预览
既然都看到这了,不妨给个star吧,这对我真的很重要 :
⽅法⼆
在写完脚本后和同学的讨论中,我⼜发现可以直接将本地的图⽚(如果是在.assets⽂件夹中的话)通过picGo上传到图床,任何通
过ctrl+f,全局替换将本地路径替换为图床路径就⾏。
但这种⽅法也有⼀个问题就是如果图⽚⽐较多的话上传会⽐较慢,picGo应该是⼀张照⽚⼀张照⽚地上传,这个也没有什么办法去优化
如果图床是搭建在码云上的话,则可以把.assets⽂件夹拷到本地仓库然后直接push就⾏,相对来说速度⽐较快
typora全局替换不知道怎么操作的话可以看⼀下我的这篇,⾥⾯有详细的图⽂介绍

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。