本文总共讲了两种上传方法
第一种适合喜欢捣鼓一些东西的码友,主要是使用java实现的,需要本地有java环境第二种无需任何环境,只要有图床即可
文章目录方法一
絮絮叨叨使用方法 方法二
方法一 絮絮叨叨先扯扯我为什么要写这个脚本以及主要思路,如果不感兴趣的话可以跳到后面直接看如何使用,如果时间不紧的话还是看看吧,方便了解一下思路
在最近整理笔记发博客的时候碰到了一个很大的问题,我在平常记笔记的时候设置typora的上传模式为复制到./${filename}.assets文件夹。
这就导致我如果想发博客的话需要将里面的图片一张张再上传到图床上,然后修改md文档中的链接格式,而在md文档中有两种图片的链接方式,
第一种是,这种是在添加图片是加了缩放,然后格式变成了html的img标签第二种是,这种是直接复制照片进去的格式
在我的摸索下发现如果把typora的图片图片操作设置为上传图片的话,对于第二种格式的图片链接,选中这个链接,然后ctrl+x,然后ctrl+v就会自动上传了,但是对于第一种格式的链接这种方法就没用。
然后这个时候我就用出来了我的第一种方法,从图片的文件夹里面找到对应的图然后一张一张地再复制进文档中,刚开始还觉得挺机灵的,然后到后面就意识到了问题的严重性,记的笔记每个文档基本就30+张图片,这么做效率也实在是太低了。
于是我就萌生了写一个脚本的想法,初始的想法只是写一个脚本把第一种格式的图片链接转换为第二种格式的,然后可以直接在文档中操作就行了,不用一张一张去找图片,然后用了两三个小时,学了学java文件输入输出,正则表达式解析,然后完成了第一版的脚本,刚开始用着还挺舒服,速度挺快,但是感觉我都写脚本了,为什么不直接一步到位,直接把他上传到图床去呐。
然后就是一阵琢磨,然后发现使用的picGo还有一个内核版本,然后是使用命令行上传图片,那我不就可以直接java调用cmd控制台然后使用命令将图片上传然后获得上传后的图片路径,再将这个路径替换到md文件中,不就节省了很多工作量吗,说干就干,然后又用了两个多小时,学习了一下java如何直接调用cmd的命令,并获取 cmd的输出,然后写完了第二版的脚本。
第二版相比第一版来说就非常舒服了,我只需要修改一下文件所在路径以及文件保存路径,然后就等程序运行结束,就可以获得到一个路径全部替换成图床的md文档了,这时候就可以直接cv进博客然后发布了。
但是用这个写了几篇之后又出了问题,我如果处理一个有50多个图片的文档光调用picGo上传图片就需要一分钟,虽然很短,但是我还是懒得等,然后就又想修改了,我再仔细想想,我的图床是放在Gitee上的,那我是不是直接可以把仓库拉倒本地,然后将扫描到的图片存到本地仓库中,md文档中直接替换为上传后的图床地址然后保存,最后只需要将本地仓库的东西提交到远程仓库即可,然后就开始改代码,同时还新加了可以直接自动扫描一个文件夹中的所有md后缀文件并处理(包扩子文件夹)的功能。
于是就有了最终版本了,支持两种上传模式,一种是直接上传的,另一种是上传到本地仓库然后再提交,同时也可以自定义处理后的文件的输出路径,到现在为止就算是得到一个我比较满意的版本了。
最终经过我的实测处理我大三上的所有笔记文件,也就用了两三秒,算上提交仓库也就用了两分钟而已,可以说在性能上还是很不错的,处理的文件数量和图片数量以及输出的文件夹如下图,可以看到效果还是很不错的
使用方法接下来说一下他的使用方法
使用下面命令将项目拉倒本地
git clone https://gitee.com/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 = "https://gitee.com/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\picgo.exe u ";
// 需要检测的图片后缀
public static String[] imgSuffix = {".png", "jpg", "jpeg"};
picGo-core的配置方法请参考Typora+PicGo-core插入图片自动上传
上传后的照片前缀为除文件名的其他部分
如果为模式一,程序运行完成即可在生成的文件中预览如果为模式二,需要进入本地git仓库中push后才可在生成的文件中正常预览
既然都看到这了,不妨给个star吧,这对我真的很重要:项目地址
方法二在写完脚本后和同学的讨论中,我又发现可以直接将本地的图片(如果是在.assets文件夹中的话)通过picGo上传到图床,任何通过ctrl+f,全局替换将本地路径替换为图床路径就行。
但这种方法也有一个问题就是如果图片比较多的话上传会比较慢,picGo应该是一张照片一张照片地上传,这个也没有什么办法去优化
如果图床是搭建在码云上的话,则可以把.assets文件夹拷到本地仓库然后直接push就行,相对来说速度比较快
typora全局替换不知道怎么操作的话可以看一下我的这篇博客,里面有详细的图文介绍



