前言

之前用Gitee图床,没想到这么快就寄了,还好的是虽然不能通过外链访问了,但是图片还是在的,现在的问题有2个,找到新的替代图床、以及将旧图床的图片迁移至新图床。

  • 替代图床:一直不愿意使用Github仓库作为图床,因为网上一直有声音说有被封号、或删库的风险,也不愿意使用公共图床,总感觉把图片放在别人的服务器上不安全,于是经过一番寻找,决定使用Coding暂时作为图床使用(也不知道能撑多久😥)
  • 旧图床的迁移:这个比较简单,由于图片文件名一样,只是换了个存放位置,所以可以使用python写个脚本,将原本文章中的图片链接替换为新的图片链接即可

本文实现 Coding + Picgo Core + Typora 一条龙配置服务,配置完成即可在Typora写作,插入图片自动上传到Coding仓库中。

软件下载

  1. 下载nodejs(自行百度)

  2. 安装picgo.exe,如下

    打开typora后,选择 【文件】-【偏好设置】-【图像】,看下图:

    image-20210419161251100
  3. 下载插件 coding 插件 和 super-prefix

1
2
#先切换到picgo安装目录下:cd C:\Users\用户名\AppData\Roaming\Typora\picgo\win64>
C:\Users\用户名\AppData\Roaming\Typora\picgo\win64>picgo install coding super-prefix

上传配置

首先要新建一个仓库用于存放图片,然后是配置插件,让插件将图片上传到指定仓库中。

Coding创建仓库

  1. 创建image-20220606232022672

  2. 选择全功能的(懂的可以选择右边,最后按需启用相应功能即可)image-20220606232222855

  3. 创建仓库

    image-20220606232808841

  4. 然后就像Github、Gitee仓库那样使用就行了,我这里创建好了,commit一些文件、文件夹上去后是这样的

    image-20220606233112871

配置文件信息设置

配置文件在 C:\Users\用户名\.picgo目录下的 config.json文件中

打开插件的配置文件,把下面的内容覆盖掉 config.json 原来的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
"picBed": {
"uploader": "coding",
"current": "coding", // 与uploader一致
"transformer": "path",

"coding": {
"groupName": "ajream",
"Project": "images",
"repoName": "img",
"Token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", //你的token
"branch": "master",
"floder": "img",
"save_with_date": true,
"customUrl": "" //自定义域名
}
},
"picgoPlugins": {
"picgo-plugin-gitee-uploader": true,
"picgo-plugin-super-prefix": true,
"picgo-plugin-coding": true
},
"picgo-plugin-super-prefix": {
"prefixFormat": "YYYYMMDDHHmmss_" // 图片命名格式,这里设置为加上日期+时间作为前缀
},
"picgo-plugin-gitee-uploader": {
"lastSync": "2022-05-30 01:23:50"
}
}

关注以下几个字段:

首先找到仓库的路径,获取一些信息:

image-20220606233738790

  1. “groupName” 组名,根据上图进行修改,我的是 “ajream”

  2. “project” 项目名,根据上图进行修改

  3. “repoName” 仓库名,根据上图进行修改

  4. “Token” 获取方式:

    进入个人账户设置

    image-20220606234108884

    新建token

    image-20220606234318731

    打勾

    image-20220606234538637

    复制token,粘贴到config.json配置文件

    image-20220606234820360

  5. “floder” 设置你的图片保存在哪个文件夹,像我之前瞎搞的时候弄了2个文件夹,这里就保存在 img 文件夹了(吐个槽:作者把文件夹folder的单词拼成了floder🤣)

    image-20220606235121853

  6. “save_with_date”: 设置为true的话,会在保存的文件夹(我的是img)下,以日期"YYYY/MM/DD"的格式创建文件夹,并把图片放在这个新建的文件夹里,也就是同一天上传的图片会被放到一起,我这里设置为true,方便后面整理

  7. “customUrl” 自定义域名,没有的话设置为空""即可

  8. “branch” 图片上传的分支名,没有特殊要求用 master 即可

Python脚本

随便写了个脚本,用于将之前的博客文章中旧图片的链接转为新的链接,首先对比下新旧图片链接的差异:

1
2
https://gitee.com/ajream/images/raw/master/img/2021-04-1916-12-52_image-20210419161251100.png
https://ajream.coding.net/p/images/d/img/git/raw/master/img/2021-04-1916-12-52_image-20210419161251100.png

经过对比新、旧图片链接,可以发现后面部分(如下)是相同的,因此只需要把前面部分替换掉即可

1
/raw/master/img/2021-04-1916-12-52_image-20210419161251100.png

参考代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import os

print("输入需要遍历的文件夹的路径,如:D:\MyBlogs\source\_posts")
dir_path = input(r"")

print("输入旧的图片链接的前缀,如:https://gitee.com/ajream/images")
gitee_name_prefix = input("")

print("输入新的图片链接的前缀,如:https://ajream.coding.net/p/images/d/img/git")
coding_name_prefix = input("")

def update_img_name(fpath):
new_text = []
with open(fpath, 'r', encoding="utf8") as f:
text = f.readlines()
for t in text:
if t.startswith("![") or t.startswith("<img") or ("/images/raw/master/" in t): # 判断是图片链接
if(gitee_name_prefix in t):
t = t.replace(gitee_name_prefix, coding_name_prefix) # 替换为新链接
new_text.append(t)
# with open(fpath[:-3] + "_after.md", 'w', encoding="utf8") as nf: # 修改后另存为新文件
with open(fpath, 'w', encoding="utf8") as nf: # 在原文件直接修改
for nt in new_text:
nf.write(nt)
print("ok")


def find_files(file_path): # 递归文件夹下的所有md文件
if os.path.isfile(file_path): #判断是否为文件
if file_path.endswith(".md"):
file_list.append(file_path)
return
else: #如果是目录,执行下边的程序
for file_ls in os.listdir(file_path):#循环目录中的文件
find_files(os.path.join(file_path, file_ls))#再次判断目录中的文件,实现递归,函数调用函数本身

file_list = [] # 存储查找到的md文件路径

find_files(dir_path)

for i in range(len(file_list)):
print(f"第{i}篇---{file_list[i]}")
update_img_name(file_list[i])

其他

网上有很多图床,但很多时候大家可能找不到相应的插件,实际上使用picgo为核心的图床插件基本可以在npm官方仓库里找到,输入 picgo作为前缀即可

前往npm

image-20220615094801573

picgo与picgo-core的官方地址如下:

picgopicgo-core
图形化界面操作使用命令行操作