1

Typora每次复制图片都是将图片保存在本地,比较麻烦,特别是管理起来或者替换终端的时候很麻烦,虽然也有其他方法可以配合图床,但是我认为最优解还是Python+OSS,精简而细节。

购买OSS

这边我所购买的是aliyun的OSS资源包,价格为1年40G/¥5元还是比较便宜的,正常我们存储图片也够了。

购买完以后到OSS管理控制台新建Bucket

image-20240322191058790

新建的时候公共读一定要开!

创建完以后有条件的可以配置域名,没条件就直接用OSS默认的域名

image-20240322191218262

设置OSS AK

设置accesskeyid和accesssecret,这个相当于是OSS的帐号和密码,生成完以后一定要保存好,也不能泄露。

首先设置AK需要先创建一个RAM用户,这个到RAM访问控制即可创建

image-20240322195017605

创建完RAM用户的时候有个权限设置,一定要设置好!!!(这个很重要)

权限一定要低!

权限一定要低!

权限一定要低!

只让他管理OSS即可!!

image-20240322191945013

只选这两个即可!

创建完以后会自动生成AK,将AK保存好就好了。

如果AK没有保存好,可以进入RAM用户重新生成AK。

image-20240322192106361

AK保存好,你的图床就算完成一半了!

配置Python

# -*- coding: utf-8 -*-
import oss2
import time 
import argparse
import requests
arg = argparse.ArgumentParser()
# 填写RAM用户的访问密钥(AccessKey ID和AccessKey Secret)。
accessKeyId = ''
accessKeySecret = ''
# 使用代码嵌入的RAM用户的访问密钥配置访问凭证。
auth = oss2.Auth(accessKeyId, accessKeySecret)

def oss_upload(filename):
    try:
        # 格式化成2016-03-20 11:45:39形式
        # time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
        time_ = time.strftime("/%Y/%m/%d/%H:%M:%S-", time.localtime()) 
        file_name_list = filename.split('\\') #分割文件名
        path = f'{time_}'+file_name_list[len(file_name_list)-1] #上传后的路径,以时间来上传
        # -*- coding: utf-8 -*-
        from oss2.credentials import EnvironmentVariableCredentialsProvider
        # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        # 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        # yourBucketName填写存储空间名称。
        bucket = oss2.Bucket(auth, 'https://oss-cn-shanghai.aliyuncs.com', 'img')

        # 上传文件到OSS。
        # yourObjectName由包含文件后缀,不包含Bucket名称组成的Object完整路径,例如abc/efg/123.jpg。
        # yourLocalFile由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。
        # print(time_)
        oss_filename = 'Typora'+path
        bucket.put_object_from_file(oss_filename, filename)
        print('https://img.oss-cn-shanghai.aliyuncs.com'+oss_filename)
        #这里直接获取图片上传后的地址,这里的https://img.oss-cn-shanghai.aliyuncs.com就是你桶的地址
    except Exception as e :
        print(e)


arg.add_argument('-f','--filename',type=str)

args = arg.parse_args()

if 'http' in args.filename: #判断是网络资源还是本地资源
        header = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.61'}
        res = requests.get(url=args.filename,headers=header) #请求网络资源
        temp_path = 'C:\\Users\\Administrator\\AppData\\Roaming\\Typora\\typora-user-images\\' #临时目录
        time_filename = str(int(time.time())) #时间命名
        filename =temp_path + time_filename + '.jpg' 
        with open( filename ,'wb') as f:
            f.write(res.content)
        res.close()
        oss_upload(filename)

else:
        oss_upload(args.filename)

根据上面代码做相应修改

AK配置

image-20240322192917852

这里的accessKeyId、accessKeySecret,换成自己OSS对应的

存储空间配置

image-20240322193052455

这里第二个参数写OSS对应的域名,第二个参数为你的设置Bucket名称

image-20240322193250311

获取图片地址

image-20240322193528814

欲上传图片的临时目录地址设置

image-20240322193602173

临时目录为Typora默认存放图片的目录

可以直接在Typora随便粘贴个图片上去就可以看到该机的临时目录

修改一下就可以了

Typora上传设置

image-20240322193742209

python  D:\soft\Typora\oss_upload.py -f  

直接写上python调用即可,py文件一定要绝对路径!

-f后面是跟上的是图片地址

最终效果

1

#none
更新于: 2024年03月22日 19:50
1624
0
发表评论