美柚明治 发表于 2022-1-19 20:47

typora+华为云oss存储做图床

背景:PicGo | PicGo



pic这个项目,并没有对华为云的对象存储服务,我昨天在看论坛的时候,一个哥们的typora 配合 csdn 这个想法给了我提示,通个宵把华为云的搞出来了。

代码如下:
# -*- coding: utf-8 -*-

import sys
import yaml
import pyperclip as pc
from obs import ObsClient
import tkinter as tk
from PIL import Image, ImageTk# 导入PIL模块中的Image、ImageTk
import tkinter.messagebox

con_path = sys.argv
pic_path = sys.argv
pic_name = sys.argv.split("\\")[-1]


# 读取文件
def readfile(filepath):
    f = open(filepath, encoding="utf-8")
    yaml_reader = yaml.load(f.read(), Loader=yaml.FullLoader)
    f.close()
    return yaml_reader


# 上传文件到 oss
def upload(name):
    obsClient = ObsClient(
      access_key_id=config['access_key_id'],
      secret_access_key=config['secret_access_key'],
      server=config['server']
    )
    content = open(pic_path, 'rb')
    resp = obsClient.putContent(config['bucketname'], name, content=content)
    # pc.copy('![](' + resp.body['objectUrl'] + ')')
    pc.copy('![](' + resp.body['objectUrl'] + ')')
    print(resp.body['objectUrl'])
    return resp['status']


# 提交
def but():
    name = label2.get("1.0", tk.END + "-1c")
    if len(name) == 0:
      tk.messagebox.showinfo('提示', '请输入路径')
    else:
      if tk.messagebox.askquestion('提示', '上传后的文件名为 ' + name + ' ') == "yes":
            if upload(name=name) < 300:
                tk.messagebox.showinfo('提示', '上传成功,链接已经放到了粘贴板')
                sys.exit(1)
            else:
                tk.messagebox.showinfo('提示', '上传失败,请重新操作上传')


config = readfile(con_path)
# 创建根窗口
root = tk.Tk()
# 设置根窗口标题
root.title("华为oss工具-海绵")
# 设置窗口大小
winWidth = 600
winHeight = 600
# 获取屏幕分辨率
screenWidth = root.winfo_screenwidth()
screenHeight = root.winfo_screenheight()

x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)

# 设置主窗口标题
root.title("华为oss工具-海绵")
# 设置窗口初始位置在屏幕居中
root.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
# 设置窗口图标
# root.iconbitmap("./image/icon.ico")
# 设置窗口宽高固定
root.resizable(0, 0)

image = Image.open(pic_path)# 创建Label组件,通过Image=photo设置要展示的图片
image = image.resize((int(screenWidth / 4), int(screenHeight / 4)))
photo = ImageTk.PhotoImage(image)# 创建tkinter兼容的图片
label = tk.Label(root, image=photo)# 创建Label组件对象
label1 = tk.Label(root, text='\n\n读取到以上图片,图片的文件名字为' + pic_name + ',请重命名\n\n')# 创建Label组件对象
label2 = tk.Text(root, height=1, width=30)
label3 = tk.Message(root, text='\n\n')# 创建Label组件对象
label4 = tk.Button(root, text='确定上传', command=but)
label.pack()# 展示Label对象
label1.pack()# 展示Label对象
label2.pack()
label3.pack()
label4.pack()

root.mainloop()# 保持窗口展示



当然,我把这个代码直接打包成了 exe 可运行的程序,都在链接里面了。注意:这个脚本执行的时候 ,需要一个配置文件。





如何使用





右键图片上传就会唤起这个程序,为什么要加一个重命名的操作呢? 其实 一个是为了重命名,一个为了放到不同的文件夹里面去。。。。如果你的命名是    test/pic.jpg    。在上传的时候就会新建 test 文件夹 , 然后在把图片放到这个文件夹下面。

重点内容:上传成功的时候,程序会关闭,但是 typora 会报错,不用管。这个是 typora 的问题,但是图片是上传到了的。上传成功之后会返回一个链接 ,程序已经帮你把这个链接放到你的剪贴板,直接ctrl + v 粘贴 就可以了。这时候 typora 就可以显示图片了。。
直接ctrl + v 粘贴 就可以了。这时候 typora 就可以显示图片了。。
直接ctrl + v 粘贴 就可以了。这时候 typora 就可以显示图片了。。



如何使用

在 typora 里面设置。 这里一定要使用 绝对路径 。






链接
链接: https://pan.baidu.com/s/1PBWYRrrCKQc4bzYNCGZx8Q?pwd=ck6c 提取码: ck6c 复制这段内容后打开百度网盘手机App,操作更方便哦

美柚明治 发表于 2022-1-20 12:26

开创者 发表于 2022-1-20 10:43
这个能通用吗?支持其它cms吗?

目前支持华为云 , 如果你是阿里腾讯的,推荐用 picgo ,因为picgo没有华为云,我就做了这个。当然你可以改改代码。支持阿里的应该不难

美柚明治 发表于 2022-1-25 21:50

i80980 发表于 2022-1-19 23:35
推荐哪个平台做图床?

码云免费,具体啥情况不清楚,阿里,腾讯都有这种oss存储,不过要钱,个人使用流量消耗其实不算大

i80980 发表于 2022-1-19 23:35

推荐哪个平台做图床?{:301_979:}

BIGOcean 发表于 2022-1-20 01:48

i80980 发表于 2022-1-19 23:35
推荐哪个平台做图床?

码云不错

i80980 发表于 2022-1-20 10:02

BIGOcean 发表于 2022-1-20 01:48
码云不错

码云超过1M不显示,后来才发现原来要登陆才显示

开创者 发表于 2022-1-20 10:43

这个能通用吗?支持其它cms吗?

影子是时光的心. 发表于 2022-1-20 10:57

在用gitee作图床 觉得也挺好的

BIGOcean 发表于 2022-1-20 11:16

i80980 发表于 2022-1-20 10:02
码云超过1M不显示,后来才发现原来要登陆才显示

我擦 这倒是个新发现

美柚明治 发表于 2022-1-20 12:26

影子是时光的心. 发表于 2022-1-20 10:57
在用gitee作图床 觉得也挺好的

确实也可以,还免费

cyzz001 发表于 2022-1-22 11:21

用github作图床
页: [1] 2
查看完整版本: typora+华为云oss存储做图床