pandoc自定义图床和服务.md

自定义图床服务

  • 环境要求
    • linux
    • golang
  • 代码
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
69
70
71
72
73
74
75
76
77
78
package main

import (
"io"
"log"
"net/http"
"os"
)

var (
// 文件 key
uploadFileKey = "file"
// 上传的图片保存根路径
filePath = "/data/repo/picpicgo/"
)


func main() {
http.HandleFunc("/", uploadHandler)
if err := http.ListenAndServe(":12798", nil); err != nil {
log.Fatalf("error to start http server:%s", err.Error())
}
}

func uploadHandler(w http.ResponseWriter, r *http.Request) {
// 接受文件
file, header, err := r.FormFile(uploadFileKey)
if err != nil {
// ignore the error handler
}
log.Printf("selected file name is %s", header.Filename)
authValue := r.Header.Get("Authorization")
if (authValue != "Basic eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJsb2NhbGUiOiJlbiIsInZpZXdNb2RlIjoibW9zYWljIiwic2luZ2xlQ2xpY2siOmZhbHNlLCJwZXJtIjp7ImFkbWluIjp0cnVlLCJleGVjdXRlIjp0cnVlLCJjcmVhdGUiOnRydWUsInJlbmFtZSI6dHJ1ZSwibW9kaWZ5Ijp0cnVlLCJkZWxldGUiOnRydWUsInNoYXJlIjp0cnVlLCJkb3dubG9hZCI6dHJ1ZX0sImNvbW1hbmRzIjpbXSwibG9ja1Bhc3N3b3JkIjpmYWxzZSwiaGlkZURvdGZpbGVzIjpmYWxzZSwiZGF0ZUZvcm1hdCI6ZmFsc2V9LCJpc3MiOiJGaWxlIEJyb3dzZXIiLCJleHAiOjE2OTkzNTUyNTMsImlhdCI6MTY5OTM0ODA1M30.xOF_H27bkI2qL0ozpDGWCJKOToegAzZjIk6edFWqZC0") {
log.Printf("auth fail")
return
}
path := filePath + r.Header.Get("Uri")
createFile(path)
imgPath := path + header.Filename
log.Printf("path is %s", path)

// 将文件拷贝到指定路径下,或者其他文件操作
dst, err := os.Create(imgPath)
if err != nil {
log.Fatalf("create file error :%s", err.Error())
// ignore
}
_, err = io.Copy(dst, file)
if err != nil {
log.Fatalf("copy file error :%s", err.Error())
// ignore
}
log.Printf("upload success")
io.WriteString(w, "{\"code\": 0, \"data\": {\"url\": \"" + (r.Header.Get("ImgHost") + r.Header.Get("Uri") + header.Filename ) + "\"}}")
}


//调用os.MkdirAll递归创建文件夹
func createFile(filePath string) error {
if !isExist(filePath) {
err := os.MkdirAll(filePath,os.ModePerm)
return err
}
return nil
}

// 判断所给路径文件/文件夹是否存在(返回true是存在)
func isExist(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}

service
1
2
3
4
5
6
7
8
[Unit]
Description=picgo-server

[Service]
ExecStart=/opt/picgo-server/picgo-server

[Install]
WantedBy=multi-user.target

pandoc 自定义图床

  • web-uploader 1.1.1 下载安装
    • 插件设置 -> 搜索下载即可
  • web-uploader 配置
    • 参考链接
    • API 地址 : http://119.91.145.27:12798/
    • POST参数名 : file
    • JSON路径 : data.url (这个是上传接口返回值的 url 的值,对照上面代码就明白了)
    • 自定义请求头 : {“Authorization”:”Basic eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJsb2NhbGUiOiJlbiIsInZpZXdNb2RlIjoibW9zYWljIiwic2luZ2xlQ2xpY2siOmZhbHNlLCJwZXJtIjp7ImFkbWluIjp0cnVlLCJleGVjdXRlIjp0cnVlLCJjcmVhdGUiOnRydWUsInJlbmFtZSI6dHJ1ZSwibW9kaWZ5Ijp0cnVlLCJkZWxldGUiOnRydWUsInNoYXJlIjp0cnVlLCJkb3dubG9hZCI6dHJ1ZX0sImNvbW1hbmRzIjpbXSwibG9ja1Bhc3N3b3JkIjpmYWxzZSwiaGlkZURvdGZpbGVzIjpmYWxzZSwiZGF0ZUZvcm1hdCI6ZmFsc2V9LCJpc3MiOiJGaWxlIEJyb3dzZXIiLCJleHAiOjE2OTkzNTUyNTMsImlhdCI6MTY5OTM0ODA1M30.xOF_H27bkI2qL0ozpDGWCJKOToegAzZjIk6edFWqZC0”, “uri”: “”, “imgHost”: “http://119.91.145.27:12799/api/public/dl/p8KdAUHH/"} (对照上面代码就明白了)
    • 自定义 Body : 无

pandoc自定义图床和服务.md
https://abrance.github.io/2023/11/08/mdstorage/resource/typora_pandoc_picgo/pandoc自定义图床和服务/
Author
xiaoy
Posted on
November 8, 2023
Licensed under