# typora-upload **Repository Path**: bigbugque/TyporaUpload ## Basic Information - **Project Name**: typora-upload - **Description**: Typora编辑器图床上传命令行工具。 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 4 - **Created**: 2021-08-20 - **Last Updated**: 2021-08-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Typora图床上传工具(任意拓展配置图床) v2.1.2更新 1、图片压缩不会压缩gif动图 2、增加http图片外链的上传(外链图片储存在jar所在目录temp文件夹,会隔日清除) 3、增加对302跳转外链图片的支持 ## 介绍 这是一款简易Typora编辑器的图床上传命令行工具,在Typora偏好设置->图像->上传服务->Custom Command中即可设置。当然你也可以使用Typora自带的picgo,这款工具与picgo各有优势,picgo稳定有足够社区支持,这款工具只有我一个人维护,代码可能也写得不尽如人意,希望大佬指教。 当然这不是一个单纯的图床程序,说成是类似Postman之类的请求工具更加贴切。current指定图床,bed里设置图床的相关请求信息,包括请求方式、请求头、请求参数、文件域等,以集合[]形式储存多个请求信息,请求根据顺序依次执行。例imgchr图床配置中有两个请求,第一个请求获取上传所需的auth_token并别名为token,第二个请求中使用该token上传图片。这是个一连贯的流程,你甚至可以配置N个请求。 与picogo比优势: 1. 配置即用,无需编写代码 2. 支持图片压缩再上传 3. 用sqlite储存图片md5与外链地址,同一图片二次上传直接从数据库取url 4. gitee大于1M图片自动转Pages地址并自动部署(需开启Pages功能) 5. 网络任务拓展 ## 软件架构 基于java的简易图床上传命令行工具。建议jdk8+,如果你是linux并安装多个jdk,建议写jdk中java的全路径。建议使用oracle-jdk,第三方工具包对于某些jdk版本可能会出现不兼容情况。 ## 安装教程 1. 打成jar包后即用,jar包放置位置随意,执行命令时用路径即可 可直接下载已发布程序:https://gitee.com/cwayteam/TyporaUpload/releases/ 2. 默认配置文件中包含路过图床、牛图、蓝空图床、SM.MS、gitee,其他图床可自行拓展配置文件。 **注意:安装路径中不要含空格,例如不能放“Program Files”文件夹。如果你升级新版本,建议将原配置文件移动到其它文件夹,并使用新生成的配置文件,然后将旧配置文件配置复制到新配置文件** ## 使用说明 1. 新版本首次使用自动在jar包所在目录释放配置文件config.json与数据库文件config.db。 ~~下载config.txt放置于jar包同目录,~~想用哪个图床current里就填哪个,自带多个图床只需补全所需信息即可。配置可随时拓展添加新图床,理论上知道请求方式、参数即可拓展。 2. 在Typora中依次选 **文件->偏好设置->图像** 中,插入照片时的下拉框选**上传图片**,并选**对本地位置的图片应用此规则**,其它的可以取消勾选,Linux电脑可能要勾选**优先使用相对路径**。 ![image-20201130133214766](https://i.niupic.com/images/2020/11/30/934N.png) 3. 上传服务设定中选 Custom Command,命令里输入: ``` java -jar jar包所在路径/upload.jar ``` 插入图片可直接自动上传,粘贴图片需选择上传 ![image-20201130133252458](http://i.niupic.com/images/2020/11/30/934M.png) ### 额外功能说明 #### header转换为json 例如谷歌浏览器打开控制台,选定某一请求,复制headers或其它键值对参数到txt文件 ![image-20201203104554166](https://www.helloimg.com/images/2020/12/03/image-20201203104554166_tf8558c69c2df756e.png) 例如复制到a.txt中,输入命令即可输出可直接复制到配置文件的格式 ``` java -jar upload.jar ./a.txt ``` ![image-20201203105503701](https://www.helloimg.com/images/2020/12/03/image-20201203105503701_t5e7d4051f4d24e6f.png) #### 网络任务 新版本会在jar包路径生成configTask.json文件,在此放置网络任务请求,语法与图床请求配置想同,该配置文件里请求每天只执行一次,执行后会更新lastExec字段。 语法例如(以下只是举例): ```json { "_ua": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Mobile Safari/537.36", "task":{"任务1":[ { "url": "https://www.xx.com/xx", "type": "post", "header": { "Accept": "*/*", "User-Agent": "$ua" }, "param": { "name": "zhangsan", "password": "123456" }, "successFlag": "success" } ]}, "write":{ } } ``` 若配置多个任务不想让某些执行可用"use":false让其无效。 #### 多端发帖 程序默认带的是hu60论坛发帖配置示例,其它可自行配置。 使用命令 ``` java -jar upload.jar abc.md ``` 只要文件是md后缀即可,默认程序会将md转成html发布,若配置中任务名以_md结尾则以原文发布。调用时标题为`$title`,内容为`$content`。 ## JSON配置说明 ### 结构预览 ```json { "current": "niupic", "date": "yyyy/MM/dd", "zip": 0.5, "db": "", "_ua": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.135 Mobile Safari/537.36", "bed": { "niupic": [ { "url": "http://www.niupic.com/index/upload/process", "type": "post", "fileFiled": "image_field", "successFlag": "success", "getByPath": "data", "out": true, "before": "https://" } ] } } ``` 配置文件为json数据结构,根节点包含current、bed等关键词。bed中包含各图床信息,图床中为json数组形式的请求信息,可以配置多个请求,数组中请求从上至下依次执行。 ### 基本关键词 current:填图床别名,用于选定bed中的图床。 bed:图床配置,可以配置无限个。 db:填写值任意,只要存在该配置即开启数据库模式,上传图片后保存图片md5、url进本地数据库,同一张图片二次上传直接从数据库取地址,避免二次上传带来的资源浪费。 date:填写时间格式,例如`yyyy/MM/dd`,无该项配置默认为`yyyy-MM-dd`。可在请求中通过`$date`调用,例如在gitee中指定图片储存位置在日期文件夹内用到。 zip:开启图片压缩,填写范围大于0小于等于1,数字越小图片质量越差体积也越小,不会缩小图片尺寸,如需传原图请删除zip这行配置。**默认的json配置里图片压缩为开,如不需要请删除该行!** `_abc`:下划线加任意字符,类似于变量赋值,例`_ua`储存User-Agent值,方便后面通过`$ua`调用。 use:当"use":false时代表该条请求无效 ## 变量 在程序中定义了一个类似变量的东西,可以通过下划线直接赋值(例:`"_name":"zhangsan"`),后续通过美元符号调用(例:`$name`),在`url、header、param、out`的值中均可调用,若在句子中调用需在外面套曾小括号,例如:`"out":"我叫($name)"`。 ### 默认变量 有几个变量值无需定义,需要时直接调用即可: $ran:五位数随机数 $timestamp:当前时间戳(13位) $date:格式化后的日期,虽无需赋值,但可用date设置日期格式(见开头介绍) $cookie:在某个图床中,若第一个请求header中设置了cookie,则第二个请求可直接通过`$cookie`调用 $ua:同cookie,首个设置后可直接调用,但鉴于大家UA都是固定某个,建议用`_ua`在根节点赋值。 ### 别名赋值 alis:在请求中填写,将请求的响应值的解析结果赋值给某变量,例:`"alis":"token"`将该请求解析结果赋值给token,后面请求可通过`$token`调用该值。 至于有人可能会问别名不是alias么?写习惯了将错就错吧,我这里alis就是别名。 ## 请求设置 在一个图床中可包含多个请求,请求参数可通过浏览器控制台的network获取。 以下介绍的关键词全都在请求中使用(即图床[]内的请求中使用)。 ### 条件执行 gt:文件大小大于等于指定值执行该请求,单位Byte lt:文件大小小于指定值执行该请求 一般不用加这两个,除非是特殊场景,例如gitee。 ### 请求参数 url:请求地址 type:请求方式 post/get(不填默认为get) header:请求头 param:请求参数 fileFiled:文件域(表单中上传文件的name,例如下图中的image_field) ![image-20201127175939134](https://i.niupic.com/images/2020/11/27/92og.png) fileBase64:base64文件域,将文件base64编码后放在请求参数里。 ### 结果解析 successFlag:成功标识,对请求后返回的数据判断有无该字符串,有则成功,**成功后才能使用getByPath或getByReg进行解析请求的返回值**。 successFlag1:若successFlag中字符串匹配不到的话,可依次匹配successFlag1至最高successFlag10里的内容,关系为或。 getByPath:通过路径解析json数据。若请求返回是json数据,则使用该配置,值填json的路径,例如data.url,也可以填多条路径,以英文逗号隔开,例如data.url,data.imgage,前面的路径匹配不到依次向后匹配。 getByReg:通过正则解析返回数据。若返回是文本或html数据则使用正则截取,正则写在小括号里,转义符号为\。获取的内容就是小括号里正则的内容。 all:若对返回数据不处理全部使用,例 `"all":true`(值任意,是不是true无所谓)。 alis:对返回数据进行别名,或者说是赋值,下个请求中可以用“$别名”调用。 before:在解析结果前加文字,例如配置文件中niupic的请求返回的网址不带https://,可以使用这个加上。 after:在解析结果后加文字。 out:值任意,表示该请求输出解析结果。若值中包含变量则直接显示变量值。 ## 图床示例 以下展示几个图床的示例,简述其思路。 ### 牛图 ```json "niupic": [ { "note": "牛图图床http://www.niupic.com", "url": "http://www.niupic.com/index/upload/process", "type": "post", "fileFiled": "image_field", "successFlag": "success", "getByPath": "data", "out": true, "before": "https://" } ], ``` 访问官网发现它无需登陆,这就方便多了,无需token、cookie,一般只需要传必要参数即可,我截了上传时的图,如图: ![image-20201130155355784](http://i.niupic.com/images/2020/11/30/936q.png) 上图我们可以看到其参数只有文件域**image_field**,那只需设置文件域即可,并且它直接返回网址,只是网址不带http协议,这里我们用before手动加上`https://`即可。 ### 蓝空图床 ```json "lsky": [ { "note": "蓝空图床https://www.lsky.pro,以下url为官方演示,图片会清理,请使用以蓝空图床程序搭建的网站域名,邮箱,密码替换", "url": "https://pic.iqy.ink/api/token", "type": "post", "param": { "email": "aaaaa@qq.com", "password": "aaaaa" }, "successFlag": "success", "getByPath": "data.token", "alis": "tokens" }, { "url": "https://pic.iqy.ink/api/upload", "type": "post", "header": { "token": "$tokens" }, "fileFiled": "image", "successFlag": "success", "getByPath": "data.url", "out": true } ], ``` Lsky Pro(兰空图床)并不是一个图床网站,而是一款图床程序,官网只提供演示并不提供图床服务,很多人用该程序搭建了图床。以上配置适合所有用蓝空程序搭建的图床。 这里我根据官网演示站点的接口说明写的配置: https://pic.iqy.ink/index/api.html 第一个请求的参数带用户邮箱、密码,对请求返回值用data.token解析获取token值,并别名赋值给了tokens;第二个上传接口就直接用了该$tokens进行上传,上传成功后通过data.url获取链接。 建议接口先用Postman进行可行性测试。 ### Gitee Gitee配置较多,就不贴具体配置了。由于Gitee普通链接对超过1M的图片只能在登陆后显示,但md文件分享给别人总不能让别人登陆自己的帐号吧? Gitee Pages倒是可以解决这个问题,仓库开启Gitee Pages,你上传的图片可通过Pages的链接查看,并且无1M限制。 因此在这里用`lt`跟`gt`对上传图片大小做了判断,超过1M返回Pages的地址,并对Pages进行重新部署。 这里还是推荐大家使用`zip`参数压缩图片(如果只是做做笔记对图片质量无要求的话),一般稍大的图片都能压缩到1M以下,可自己控制压缩率,压缩越小图片质量越差,可自行测试选择合适的压缩率。 #### 变量说明 由于gitee需要的共用文字较多,因此我把它们抽出来写以下划线开始的变量中,以下介绍各变量填什么: _giteeName:用户名,登陆gitee点自己头像->个人主页,在头像下@开头的就是你的用户名,此时在网址栏也能看到。 _giteeRepo:仓库名。 _giteeToken:在**头像->设置->安全设置->私人令牌**里生成令牌。 _giteeBranch:要部署的分支,一般都是master。 _giteeMsg:提交时信息,自定义。 _giteeFolder:图片文件夹,你在仓库新建的什么文件夹来存图片。若仓库页面没找到新建文件夹菜单,可使用WebIDE,点加号`+`新建目录。 ![image-20201130165258884](https://i.niupic.com/images/2020/11/30/937a.png) 网址如下,请替换需要替换的部分: ``` https://gitee.com/-/ide/project/用户名/仓库名/edit/master/-/ ``` _giteeCsrf:浏览器登录gitee,查看网页源码,搜索csrf-token,复制content内容即可。 _giteeCookie:登录gitee,浏览器控制台输入document.cookie即可获取cookie。 ## 其它参考 1. Typora自带picgo-core使用请参考:https://cway.top/post/814.html 2. Typora使用js图床插件请参考:https://cway.top/post/713.html