Joplin Typora 粘贴图片 | 当使用Typora作为Joplin编辑器时,如何粘贴图片并上传到Joplin服务器,替换链接

一、背景

当我们使用Joplin时,上传图片时会自动上传到Joplin服务器并替换链接

但是Joplin的编辑器不好用,我更习惯用Typora来编辑,

然而Typora中上传的图片只能在本地,无法上传到Joplin服务器,在其他客户端也看不到图片

本文编写了一个脚本,通过Typora的上传服务器功能,自动上传图片并替换为Joplin链接

二、准备脚本

2.1 第一个脚本,修改token

token可以在网页剪藏器中获取

在这里插入图片描述

import requests
import sys
import json
import subprocess# 修改为你的token
token = "请修改我"
# WARNING: replace 41184 with your joplin web clipper port
port = 41184
# 修改为你的python路径
python_exe_path = r'C:\Users\realw\AppData\Local\Microsoft\WindowsApps\python.exe'
# 修改为你的第二个脚本路径
second_script_path = r'D:\app\Typora\job\typora-windows-2.py'# collect args for typora-windows-2.py
args = []
for arg in sys.argv:# the first arg is .py file, ignore itif(".py" in arg):continue# the second arg is the current editing file passed by Typoraif(".md" in arg):args.append(arg)continue# other arg is the local Typora-Image path passed by Typoraurl = "http://127.0.0.1:" + str(port) + "/resources/?token=" + tokenpayload = {'props': '{}'}files = [('data', ('typora.png', open(arg, 'rb'), 'image/png'))]headers = {}# upload your images to joplin resources using joplin web clipper APIresponse = requests.request("POST", url, headers=headers, data=payload, files=files)newFilePath = "http://127.0.0.1:" + str(port) + "/resources/" + json.loads(response.text)["id"] + "/file?token=" + token# print newFilePath, so Typora can replace the local-typora-image path with the joplin web clipper url.# We cannot directly use "resources/" + json.loads(response.text)["id"] + ".png" since Typora thinks it is an illegal URL,# and a warning will show up.print(newFilePath)args.append(newFilePath)args.append("resources/" + json.loads(response.text)["id"] + ".png")# first arg is .py file, second arg is .md file, then newFilePath and "resources/" + json.loads(response.text)["id"] + ".png" appear in order
# We use subprocess because Typora will wait for the result of the first script and then replace the Typora_local_path with newFilePath.
# If we don't use subprocess, our replacement will be ahead of Typora's, and covered by Typora, which makes newFilePath as the final result link.
# This is not what we want, we want "resources/" + json.loads(response.text)["id"] + ".png" as the result.
subprocess.Popen([python_exe_path, second_script_path] + args, creationflags=subprocess.DETACHED_PROCESS, shell=False)sys.exit()

2.1 准备第二个脚本,按需修改delay时间

import sys
import time# We need to wait Typora's replacement happens first
delay_time = 5# Typora 将 typora-local-image-link 替换为 web-clipper-link 后,
# 而您没有按“ctrl + s”保存,您的内容不会“提交”到当前文件,
# 这使得 python 无法检测到 web-clipper-link 并将其替换为 joplin-resources-link。
# 因此我们至少重试该函数 10 次以等待您的保存。(如果您在 50 秒内没有按“ctrl + s”保存,则替换将失败)
retry_times = 10
time.sleep(delay_time)for i in range(retry_times):try:with open(sys.argv[1], 'r+', encoding='utf-8') as file:file_content = file.read()file_content_copy = file_contentfor index, arg in enumerate(sys.argv):if ((".png" in arg) or (".md" in arg) or (".py" in arg)):continue# replace newFilePath with "resources/{id}.png"file_content = file_content.replace(sys.argv[index], sys.argv[index + 1])file.seek(0)file.write(file_content)file.truncate()time.sleep(delay_time)except Exception as e:print(f"An error occurred: {e}")time.sleep(delay_time)
sys.exit()

3. 修改Typora配置

在这里插入图片描述

选择图象,上传服务,命令,确保你的python环境和模块正确

python D:\app\Typora\job\typora-windows.py ${filepath}

点击验证图片上传
在这里插入图片描述

4 在编辑器内测试

用法:

在编辑器内粘贴图片,按下ctrl+s 保存,等待几秒后自动替换为内部连接,大公告成

如果遇到问题,可以手动点击上传图片,检查顶部报错

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/852036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#——方法函数详情

方法(函数) C#是面向对象的,所以C#中的方法也是相对于对象来说的,是指某个对象的行为,比如,有一个动物的类,兔子是这个动物类里的一个对象,那么跳这个行为就是兔子这个对象的方法了.其实也就是C中的函数(C是面向过程的,叫函数). 方法: 就是把一系列相关的代码组织到一块 用于…

语法07 C++ 程序中的除法和求余

程序中的除法 int / int int double / int double int / double double double / double double 规律总结 只要除号任意一边出现了double类型,结果就是double类型 只有除号两边都是int类型,结果才是int类型 这个规律也适用于加法减法和乘法 …

服务器端渲染(SSR)

什么是服务器端渲染 ssr SSR 的全称是 Server Side Rendering,对应的中文名称是:服务端渲染,也就是将页面的 html 生成工作放在服务端进行。 网页通常是通过后端路由直接给客户端的。也就是说网页的html一般是后端服务器里通过模板引擎渲染好后再交给前…

操作系统入门系列-MIT6.828(操作系统工程)学习笔记(七)---- 系统调用函数与GDB(Lab: system calls)

系列文章目录 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(一)---- 操作系统介绍与接口示例 操作系统入门系列-MIT6.828(操作系统工程)学习笔记(二)---- 课程实验环境搭建&am…

Python 围棋游戏【含Python源码 MX_008期】

简介: 围棋,源自中国,是一种两人对弈的策略棋类游戏。它被认为是世界上最复杂的棋类游戏之一,因为它的规则简单,但变化复杂多样。围棋的游戏目标是在棋盘上占领更多的地盘,并用自己的棋子围住对手的棋子&am…

docker-compose harbor 2.11

harbor 前言 “Harbor” 是一个用于管理容器镜像的开源仓库项目。由 VMware 开发和维护,Harbor 提供一个企业级的 Docker 镜像仓库,具有丰富的功能,包括: 镜像管理:提供存储和分发 Docker 镜像的能力。安全性:支持镜像签名和漏洞扫描,确保镜像的安全性。身份认证:集成…

41 mysql subquery 的实现

前言 sub query 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 sub query 的相关处理 查看 本文, 需要 先看一下 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NUL…

QT调用vs2019生成的c++动态库

QT调用vs2019生成的c动态库 dll库的创建方法: VS2019创建c动态链接库dll与调用方法-CSDN博客 加减法示范: 头文件 // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DLL3_EXPORTS // 符号编…

SurfaceView->SurfaceView基本概念

绘制过程 View和SurfaceView绘制过程 PhoneWindow:Window的具体实现,在Activity中调用setContentView()方法时,一个PhoneWindow实例会对应一个ViewRootImpl实例,绘制,事件分发传递给ViewRootImpl进行ViewRootImpl&…

少样本学习元学习

基本概念 首先是机器学习: 然后,什么是元学习(what is meta learning?) 之前,Component都是让人自己设置的。在Meta Learning中,我们期望它能够自己学出来。 不同的meta learning方法就是想办法去学learning algori…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(二)

主要内容介绍可tmux和vim的一些常用操作,可以当作笔记需要的时候进来查就行。 文章目录 前言 一、tmux和vim 二、Linux系统基本命令 1.tmux教程 2. vim教程 3.练习 总结 前言 主要内容介绍可tmux和vim的一些常用操作,可以当作笔记需要的时候进来查就行…

javaWeb项目-ssm+vue中国风音乐推介网站功能介绍

本项目源码:java-ssmvue中国风音乐推介网站源码说明文档资料资源-CSDN文库 项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、…

Python网络爬虫5-实战网页爬取

1.需求背景 在上一篇Python网络爬虫4-实战爬取pdf中,以松下品牌说明书为例说明了网页爬取PDF的分析流程。在实际的应用中,具体代码需要根据不同的网址情况和需求进行更改。 明确要求: 此次,想要爬取苏泊尔品牌下的说明书pdf&…

【第5章】Vue之API风格

文章目录 前言一、选项式 API(Options API)1. 代码2. 效果 二、组合式 API(Composition API)1. 代码2. 效果 三、两者之间的区别总结 前言 Vue.js 提供了两种主要的 API 风格来组织组件的代码:选项式 API(…

ios描述文件.mobileprovision 如何查看包含的设备 udid|IPA查看是否包含设备 UDID|轻松签查看证书是否包含自己设备 UDID

前言 之前蒲公英支持上传证书查看证书有效期和包含设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 【干货】IOS苹果P12证书有效性检测 及查看证书是否包含自己的设备 - 路灯IT技术博客 - 后厂村路灯 如今蒲公英下架了该功能,已经没有证书检…

新等保2.0防护体系方案

等保2.0防护体系 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 最近在写一些咨询相关的材料&…

计算机网络(6) TCP协议

TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件中一种核心协议。它提供面向连接的、可靠的字节流传输服务,确保数据从一端正确无误地传输到另一端。TCP的主要特点包括: 可靠性:TCP使用…

返回值返回引用返回指针之间的区别

一、返回值 当函数返回一个值时,实际返回的是一个变量的拷贝。 优点: 简单易用;安全,不会导致悬挂指针或悬挂引用; 缺点: 当返回值是一个较大的对象时会产生拷贝开销,影响程序性能&#xf…

PHP聚合通多平台支付平台源码

源码介绍 php聚合通多平台支付平台源码,源码搭建了一下,这个源码不复杂,修改一下数据库账号密码然后导入数据库就可以,和网站恢复备份一样简单! 源码截图 源码下载 PHP聚合通多平台支付平台源码

【小白专用 已验证24.6.7】C# MySQL数据库访问操作封装类

一、底层库介绍 本文主要介绍数据库访问操作类,包含:SQL插入脚本、SQL查询脚本、数据库表是否存在判断、带参脚本执行、包含事务回滚脚本执行、存储过程脚本等等。 特殊说明 在使用之前,先安装 MySql.Data 插件 二、底层库源码 2.1 程序源…