网易云-对象存储-图床上传助手

1. Justification

自打7牛挥刀自宫之后,我就把图床迁移到了网易云上,虽然不知道能用多久,但是目前还是很稳定。但这不是重点。图床迁移后,问题来了:原来付费买的图床上传工具失效了(原作者一句:不支持网易云就给我回绝了,真是…..拽啊!)。

本来我的需求不是很大,但是在用了一段时间NOS的命令行工具之后,最终,我还是决定自己动手。这主要是因为命令行工具用起来太不符合我的脾气(我怕麻烦):

  1. 选择图片和上传图片的工作流是断的;
  2. 上传之后文件的访问路径不能自动生成;
  3. 一次上传几十张图片的话,哪张是哪张根本分不清楚

其实,我对之前花钱买的iPic(哎呀,不好意思说名字出来了)的功能也有些不太满意,所以,趁着春节假期,索性自己把问题解决掉好了。

2. Objective

开发的Object Uploader的主要功能很单纯:

  1. 调用系统自带的文件管理器选择文件。虽然这种方法不如iPic灵巧,但是MacOS的Finder的拖曳、搜索方面的优势能够充分发挥。这也是我作取舍的原因之一;
  2. 调用SDK,按日期生成路径,上传图片。核心功能,没什么特殊的,这部分完全是按照SDK说明按部就班操作,原来用shell脚本,现在用python,而已。
  3. 上传路径和本地文件的关联。写文章的时候,需要在适当的位置插入适当的图片。使用图床的话,文章中插入的实际是图片的上传路径。一次上传多个图片后,能够方便地找到需要的某一张图片的正确上传路径,这是十分必要的。

开发工具一样力求简单:Python3 + Tkinter

3. Solution

准备

下载程序:

百度盘下载链接

创建一个文件夹,用来保存下载的程序,并创建一个纯文本的配置文件oss_configure.cfg,用来提供图床访问必要的参数。

oss_configure.cfg内容如下:

oss_configure
access_key
:your_access_key
secret_key
:your_secret_key
end_point
:your_end_point
public_visit_domain
:your_public_end_point
bucket
:your_bucket_name
需要注意 文件的第一行内容必须是oss_configure

这些信息都可以在网易云管理页面中的对象存储部分的设置里找到。所有信息不要加引号;end_point和public_visit_domain的信息分别为(以网易云为例):桶详情->域名管理->默认域名部分的外网end-point和访问域名,直接粘贴过来就可以,不要加https://之类的内容。

目前提供两种版本:

standalone版 (MacOS, Win64)

  1. 将主程序解压缩后放入刚刚创建的文件夹中
  2. MacOS:启动终端,并进入刚刚创建的文件夹中; Win64:进入文件夹
  3. MacOS:在终端中直接运行启动程序;Win64:双击就可以了
$ ./imgbedUploader_V1

pyc版

启动过程略微繁琐一点 。首先需要安装python3(Mac建议通过Brew安装),请自行百度。之后安装python3的软件包:

python3 -m pip install nos-python3-sdk pyperclip Pillow

接下来,将下载后解压出来的pyc文件放入刚才建立的文件夹中,并在终端中进入该文件夹,通过python3 运行。

python3 ./imgbedUploader_V1.pyc

Step 0 启动

如果oss_configure.cfg配置正确,程序启动后的界面如下图所示。

Step 1 选择需要上传的文件

点击Select File,在弹出的窗口中,选择需要上传的文件。目前,MacOS下我限制只能使用常见的图片格式(.jpg, .jpeg, .png, .gif, .bmp)。Win下理论上可以选择任意类型的文件,我没有测试。

文件选择好之后,界面上会有选择文件信息的提示。

Setp 2 上传文件

文件选择好之后,就可以上传了。点击Upload File。文件上传成功后,会生成两部分信息,一个是右上部的日志信息;一个是Remote File List中的引用路径信息(见下图)。

这里有几件事情需要说明。

首先,是上传文件的存储命名规则。某一天上传的文件会保存在bucket根目录下的当天日期目录下,文件名会被冠以上传的时间戳作为前缀。例如上图中1.jpeg文件是2019年2月7日21点29份47秒477上传的,所以这个文件就被保存为bucket根目录/20190207/212947477_1.jpeg,这些信息可以参见日志信息。

需要注意 这个机制是为了避免同名文件相互覆盖。不过产生的一个副作用便是:同一个文件上传两次,如果上传时间存在即使是毫秒级的差异,在图床上也是会作为两个文件来保存的。

其次,Remote File List中的内容是可以点击的。通过点击某一行,该行的文本信息(也就是某张图片上传后的引用地址)会自动复制到系统的剪贴板,方便粘贴,并且在界面底部会显示一个缩略图,用来指示这个路径的图像内容。见下图。

需要注意 这个缩略图并不是保存在服务器上的图片,而是来自上传的本地的图片。

Step 3 清理界面

为了方便管理多次上传的图片,退出程序之前,Remote File List中的内容是不会自动清空的。但是,对于有强迫症的我来说,一个清空按钮(Clean Remote File List)还是必要的(或许你可能注意到了,右上角的日志是随着你的操作,随时清空的)。虽然不会对你上传的文件产生任何影响,但我仍需要提醒一下:这是一个不可逆的操作。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据