一直想用typeora来写文章,可惜图床一直用的是又拍云的赞助

每次打开手动上传很麻烦,随便撸了一个,记录下

特点

这个每次上传会检查远程,如果有的文件,可以直接去重上传

简易说明

用之前记得把相关的对应参数填好

对于typora来说,返回值没有什么格式,只要包含远程的图片

他会自己提取

operator和password 在又拍云 -> 云存储 -> 功能配置 -> 存储管理,最下方,指定操作员

特别感谢

又拍云赞助的博客图床

食用方法:

用go build 生成可执行或者直接在typora设置里设置为 go run 路径/main.go 皆可

package main

import (
"crypto/md5"
"fmt"
"io"
"os"
"path/filepath"

"github.com/upyun/go-sdk/v3/upyun"
)

var (
Bucket string = "" // 又拍云bucket名称
Operator string = "" // 对应的操作人用户名
Password string = "" // 对应的操作人密钥
Url string = "" // 绑定的自己的域名,右边不用斜杠
Path string = "" // 图片目录,前后无斜杆
)

func GetFileMd5(pathName string) string {
f, err := os.Open(pathName)
if err != nil {
fmt.Println("读取文件失败", err)
return ""
}
defer f.Close()

md5hash := md5.New()
if _, err := io.Copy(md5hash, f); err != nil {
fmt.Println("读取文件md5失败", err)
return ""
}

return fmt.Sprintf("%x", md5hash.Sum(nil))
}

func main() {

// 传入的图片列表
picPathSet := os.Args[1:]

// 初始化又拍云接口
up := upyun.NewUpYun(&upyun.UpYunConfig{
Bucket: Bucket,
Operator: Operator,
Password: Password,
})

// 这里使用同步接口,因为图片上传是有顺序的,回传也应该按顺序来
for _, img := range picPathSet {
// 获取文件的md5值
md5 := GetFileMd5(img)
// 获取文件的扩展名
ext := filepath.Ext(img)
// 文件名改成md5前8位作为文件夹名,后面的作为文件名,用于查重
filename := Path + "/" + md5[:8] + "/" + md5[9:] + ext

// 这里查找下文件是否已存在,如果存在,直接返回远程路径
_, e := up.GetInfo(filename)
if e == nil {
// 没有错误说明文件存在
fmt.Println(Url + "/" + filename)
continue
}

err := up.Put(&upyun.PutObjectConfig{
Path: filename,
LocalPath: img,
})

if err != nil {
fmt.Println("文件"+img+"上传失败", err)
}
fmt.Println(Url + "/" + filename)
}
fmt.Println("success")
}