PicGo插件:上传图片到多吉云存储
重大更新
2022年04月01日:使用本插件上传图片/文件到多吉云云存储无需每次手动获取sessionToken了!
以下配置文档已失效,最新的参考本插件仓库文档。
特别感谢开发者@mingxuan的杰出贡献!
什么是多吉云
多吉云是一个融合CDN服务商,为用户提供融合CDN、云存储和视频云等服务,并且针对实名用户每月赠送一定量的产品免费额度,详情见《国内免费CDN和云存储评测分享》 。
关于融合CDN,你大概可以理解为:你从镇上买了许多优质大米,但是每年都有一些吃不完,所以你低价卖给了隔壁老王。尚不清楚多吉云是低价提供剩余服务还是专门做融合业务的,但我知道的是,他家的CDN节点主要来自腾讯云,而且流量包的价格几乎只有腾讯云做活动时候的一半。
关于云存储
提供云存储的服务商有很多,类似于大厂阿里云的OSS和腾讯云的COS,存储的文件安全性还是较高的。腾讯云的对象存储费用本身并不高,但除了存储费用之外,还有请求费、回源费和下行流量费,所以即便多次动心也忍住了使用腾讯云COS的想法。
而多吉云使用的是腾讯云COS或阿里云OSS作为存储空间的底层服务,并且为实名用户提供了10GB的免费额度,每月20GB的免费CDN流量,请求费、回源费和流量费什么的根本不存在。本着白嫖了不用太可惜的想法,我最终还是把博客的图片转移到了多吉云的云存储中。
为何要开发插件
此前犹豫要不要转移到多吉云云存储的原因之一就是,picgo没有现成的可以上传图片到多吉云的插件。在激活了typora之后,我想,要是每次写博客都去控制台上传图片,然后手动复制链接,粘贴到typora中,这样跟直接用vscode写博客有啥区别?
多吉云关于云存储和视频云的文档非常丰富,所以早在好几天前我就在看文档,准备整一个上传到多吉云的picgo插件。幸好,picgo现有一个AWS S3的上传插件,多吉云云存储支持AWS S3 SDK上传,但由于并非自家开发的底层存储服务,所以相较于通用的AWS S3 SDK上传,还要多携带一个临时,于是我把wayjam 大佬的插件拿来改了一下,适配了多吉云上传。sessionToken
才行
“开发”思路
原本的S3上传插件功能较丰富,而多吉云除了需要额外携带sessionToken
之外,有一些参数是不必要的,所以我要做的就是增加需要的东西,删除不必要的代码,保险起见,我还是仔细读了picgo插件开发的文档。
uploader
是上传功能的核心之一,而sessionToken
肯定是和accessKeyId
secretAccessKey
一同传输的,所以我在uploader.ts
和index.ts
中分别追加了sessionToken
,此外,类似于region
和PathStyleAccess
等字段是上传到多吉云时不必要的参数(比如自定义节点和存储桶本身就包含了地区),于是在两个文件中删除了对应的参数。在现有的插件源文件中修改代码,测试可以正常上传。
此后,就是对编译前的源码进行修改,并且利用Github Action自动编译并发布包到npm。
使用条件
多吉云的存储空间有两种类型,只有标准型支持使用SDK和API上传、管理文件,所以使用本插件的必要条件就是必需创建一个标准型的存储空间。
而多吉云官方公告,自2021年5月21日起,标准型存储桶不再享受免费额度,也不支持图片处理和内容审核等高级功能,该日期之前创建的存储空间暂不受影响。
但是标准型存储空间的价格应该是0.003元/GB/日,所以即便你存了1GB的文件,一年下来费用也不过才一块钱左右,所以即便是白嫖用户也完全能够接受。
使用方法
得益于多吉云丰富的文档,和插件上手的简易度,使用该插件的方法非常简单。
安装插件
下载安装picgo-plugin-dogecloud
插件,GUI可以直接在picgo的插件设置里搜索dogecloud
再点安装即可。
获取临时密钥
前面提到过,多吉云并非使用自研的存储桶,所以获取到的密钥是有有效期的,临时密钥由accessKeyId
secretAccessKey
sessionToken
三个字段组成,最长 2 小时有效期。技术说过,如有其它需求,可以用 Redis 缓存临时密钥,但对个人客户端使用来说意义不大。
获取临时密钥的方法也很简单,多吉云文档提供了一些现成的代码示例以供用户获取密钥。
以python获取为例,获取到的信息包含:accessKeyId
secretAccessKey
sessionToken
s3Bucket
s3Endpoint
keyPrefix
,其中,第四五项在云存储控制台的SDK参数也可找到,第六项为请求临时密钥时设定的允许上传的目录。
填入配置
Key | 说明 | 例子 |
---|---|---|
accessKeyID |
应用 ID | |
secretAccessKey |
应用密钥 | |
sessionToken |
会话令牌 | |
bucketName |
存储桶名 | s-gz-2384-xxxxxxx |
urlPrefix |
存储空间绑定的CDN域名 | https://img.example.com |
endpoint |
指定上传的终端节点 | https://cos.ap-guangzhou.myqcloud.com |
uploadPath |
上传路径 | {year}/{month}/{fullName} |
urlSuffix |
自定义后缀 | /shuiyin |
同样,得益于前开发者的辛勤付出,本插件同样支持上传路径使用 payload。上传路径为空则默认以原始文件名上传到根目录,如指定目录则必需添加 payload:
payload | 描述 |
---|---|
{year} |
当前日期 - 年 |
{month} |
当前日期 - 月 |
{day} |
当前日期 - 日 |
{fullName} |
完整文件名(含扩展名) |
{fileName} |
文件名(不含扩展名) |
{extName} |
扩展名(不含. ) |
{md5} |
图片 MD5 计算值 |
{sha1} |
图片 SHA1 计算值 |
{sha256} |
图片 SHA256 计算值 |
上传路径可以是纯payload,也可以是目录+payload,比如pic/{fullName}
。
注意:上传路径不能只是目录!!!
最后
所谓的”开发“本插件其实就是在前人的基础上进行改变,本身没有什么技术含量,但是这个过程确实又一次让我感受到了开源社区的美好和伟大,在此感谢多吉云免费提供的服务,也感谢所有开源项目的作者,互联网因为分享而精彩万分。
如果对项目有什么建议,欢迎在下面留言,或者直接给项目提PR,但就目前来说,应该无需什么修改了。
顺便说一下,我买了多吉云的CDN流量包,也设置了流量阈值,请某些别有用心的人不要再刷我CDN的流量了,感谢!