golang写一个typora上传到又拍云插件

2023-07-06/码农修仙/共1858字/暂无评论

一直想用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")
}
正文完

暂无评论