文章导入导出

方案一

halo社区有一vscode扩展提供此功能

https://github.com/halo-sigs/vscode-extension-halo/?tab=readme-ov-file

issue

https://github.com/halo-dev/halo/issues/4873

方案二

使用halo插件

https://github.com/Lyn4ever29/halo-plugin-export-md

来源

https://jhacker.cn/2023/halo-plugin-export2doc

终极方案

无论是方案一还是方案二,都无法很好处理md文件所附带的图片问题,尤其是方案一,居然还会修改源文件内容,而且不好批量导入导出,简直不可容忍

halo有一附件模块可以用于存放图片等二进制文件,方案二不能处理md文件的图片路径,使其与halo附件模块符合,而且也不能上传图片,针对这点,通过分析halo上传附件的接口,发现并不难,所以自己手动编程解决,代码如下

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
const fs=require("fs");
const path =require("path");


main(process.argv.slice(2))

async function main(args) {

//将相对路径变成绝对路径
args=args.map(e=>path.resolve(e))

if(!fs.existsSync('temp')){
fs.mkdirSync('temp');
}

for(let i=0;i<args.length;i++){
let c=fs.readFileSync(args[i]).toString()

let reg=/(!)(\[.*\])(\(.*\))/g

let prefix='https://677123.xyz/upload'

let basename=path.basename(args[i])

let r=c.replace(reg,(sub,one,two,three)=>{
let relativePath=three.replace('(','').replace(')','')
let r=`${one}${two}(${prefix}/${path.basename(relativePath)})`
console.log(r)
return r
})

fs.writeFileSync(`temp/${basename}`,r)

upload(path.join(args[i],`../${basename.replace('.md','')}.assets`))
}


}

async function upload(dir) {

if(!fs.existsSync(dir)){
return
}
let files=fs.readdirSync(dir)
for(let i=0;i<files.length;i++){
let absolutePath=path.join(dir, files[i])

let buf=fs.readFileSync(absolutePath)

let fd=new FormData()
fd.append('policyName','default-policy')
fd.append('groupName','')
fd.append('file',new Blob([buf],{type:'image/png'}),path.basename(absolutePath))

let res=await fetch('https://677123.xyz/apis/api.console.halo.run/v1alpha1/attachments/upload',{
method:'POST',
headers:{
'Authorization':'Bearer xxx'
},
body:fd
})

let text=await res.json()

console.log(res.statusText)
}
}

API接口

接口文档:

https://api.halo.run/ (sb,这个是1.5版本的,现在都更新2.x了,sb)

2.x版本的api接口文档,藏得真隐秘

https://demo.halo.run/webjars/swagger-ui/index.html?urls.primaryName=All%20APIs#/

来源链接

https://qiwo75.com/archives/halo-api

https://bbs.halo.run/d/4886-halo211-%E7%94%A8%E6%88%B7%E7%AB%AFapi%E4%BD%BF%E7%94%A8