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

一直想用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")
}
Gemini评论Google AI Gemini Pro
正在加载gemini娘的评价
说说 归档 标签 朋友 关于
arrow_up
theme