图床转换工具-picvt
本站图传切换过程:路过图床->github->本地->去不图床。
在这过程中, 我使用的是picvt
用来切换图床, 该项目还在开发中, 因为我没有使用过很多图床, 所以目前仅支持上述几种。
项目传送门: https://github.com/caibingcheng/picvt
构建
为了未来的适配工作, picvt
规定了一些接口, 分别是用于链接提取的extract
, 用于下载的download
, 用于上传的upload
。
创建平台适配类
如果是新增平台, 比如新增xx图床, 则在platforms/picvt_xxxx.py
创建对应平台的文件, 然后实现一个名为Porcess
的类, 继承自PICVT
, 如:
|
|
extract
需要实现一个名为extract
的方法, 如:
|
|
extract
将用于原图床的链接提取, 输入是一段string
, 比如一篇markdown
的原始数据, 实现者需要从中提取出待转换的图床链接, 并使用一个list
返回.
download
需要实现一个名为download
的方法, 如:
|
|
download
将用于原图床图片的下载, 并且需要将下载文件保存在本地磁盘, 其输入是原图床图片的链接, 输出是下载成功的状态以及保存的本地文件地址, 如果下载失败, 则本地文件地址为None
.
父类PICVT
中提供了download
的实现, 但是不适用于所有平台, 所以特殊平台需要自己实现download
方法.
父类PICVT
也提供了_save_image_default
和_get_save_path
用于将图片存储到本地位置, 或者从本地位置获取图片, 提供统一的存储位置将便于upload
方法的实现。
upload
需要实现一个名为upload
的方法, 如:
|
|
upload
将用于新图床的上传, 输入参数为本地需要上传的文件的路径, 以及与图床登录相关的参数, 包括但不限于用户名/密码/token. 该方法将返回上传成功与否的状态, 以及新图床的外链, 如果上传失败, 则外链应该为None
.
params
的config
字段可以提供很多与平台相关的参数, 比如与github
等相关的repo
、branch
、path
, 或者与local
相关的path
、link
. 注意到不同平台有些字段是复用的, 但是意思不同, 比如github
中的path
代表github
仓库中某路径, local
中的path
则代表本地某路径.
案例
更多案例可以参考项目, 或者使用help
指令.
从路过图床迁移到github
命令是:
|
|
-D ../blog/content/posts/
待扫描的路径, 将从上述路径中扫描符合imgtu规则的图片链接, -F imgtu -T github
表示从imgtu
迁移到github
, -t ****
则是github
的token
, 也可以使用用户名或者密码(未测试), --repo resources --branch main --path images
则表示上传到resources
仓库的main
分支的images
目录下.
上述指令执行完成之后会将../blog/content/posts/
中的对应链接替换成jsdelivr
的链接.
从github迁移到本地
命令是:
|
|
--path /home/xxxx/projects/blog/content/statics/
表示会将文件下载到/home/xxxx/projects/blog/content/statics/
路径下, --link /statics/
则是本地的链接前缀, 用于替换图片地址, 比如我的域名是bbing.com.cn
, 则替换后访问图片链接将是bbing.com.cn/statics/xxx.png
. -r 3
则代表失败项会尝试3次, 如果还是失败了…在执行一次上述命令即可, 此时已经成功的链接是不会再重复处理的.
从本地迁移到去不图床
命令是:
|
|
此处的--path /home/xxx/projects/blog/content/
时local作为from的需求参数,表示本地图片的存储路径(比如图片/statics/text.png
存储在blog/content/
下),--user
和--passwd
则是去不图床的用户名(邮箱)和密码。