没有理想的人不伤心

typora自定义命令上传图片至云服务器

2025/02/27
1
0

image.png

typora 自定义命令上传图片至云服务器

常用 typora 的都知道,他的图片文件默认存储在本地,因此当把 md 文件转发时,图片会丢失

网上大多数的文章都是通过 picgo 等图床工具+oss 来解决这个问题

但是我觉得在不同电脑上都要下载 picgo 重新配置太过麻烦,因此想要直接通过 typora 的自定义命令将图片上传到云服务器

解决方案:本地通过 cmd 或者 powershell 脚本的形式,将 typora 图片使用 scp 复制到服务器上,配置 nginx 通过 http 就可以正常访问图片

云服务器配置

  1. 首先配置 nginx 可访问的文件夹,用于存储图片
sudo mkdir -p /var/www/html/images
sudo chown -R www-data:www-data /var/www/html/images  # 设置适当的权限
sudo chmod 755 /var/www/html/images  # 使其具有适当的读写权限
  1. 配置 nginx

在 Nginx 的配置文件中(通常是 /etc/nginx/sites-available/default /etc/nginx/nginx.conf ),设置图片目录的访问路径。你需要为 /images 路径设置别名,使其指向你的图片目录:

server {
    listen 80;
    server_name images.hndr01d.online;  # 新的域名

    # 你不需要 root 配置了,而是应该使用 alias 来映射目录
    location / {
        alias /var/www/html/images/;  # 映射 /images 到实际目录 /var/www/html/images/
        autoindex on;  # 显示目录列表
    }
}
  • 注意:确保你的服务器防火墙允许 80 端口的访问。
  • autoindex:这将启用目录浏览,可以方便地列出文件内容。

注意要将二级域名解析到云服务器

或者不想使用二级域名,也可以跟参数,比如域名后面加 /images/,那么 nginx 配置文件得更改。

更改完后

nginx -t //检查语法是否正确
sudo systemctl reload nginx //重启 nginx 服务

本地配置

  1. 配置 ssh 密钥实现免密登录传输等

在本地执行命令生成 ssh 密钥

ssh-keygen -t rsa -b 4096 -C"your_email@example.com"

会生成一个私钥 id_rsa和公钥 id_rsa.pub

将公钥复制到服务器上的 ~/.ssh/ 目录,并将公钥内容写入 authorized_keys 文件

.ssh 以及 authorized_keys 文件的权限分别为 700 和 600

  1. 写脚本

写 bat 脚本

@echo off
chcp 65001 > nul

REM 检查是否有传入参数
if"%~1"=="" (
    echo 请提供至少一个图片文件路径
    exit /b
)

REM 设置服务器信息
set SERVER_USER=ubuntu
set SERVER_IP=images.hndr01d.online
set SERVER_DIR=/var/www/html/images/

REM 循环处理所有传入的文件
:loop
if"%~1"==""goto end

REM 使用 SCP 上传文件
scp"%~1" %SERVER_USER%@%SERVER_IP%:%SERVER_DIR%

REM 输出图片的 URL 地址,确保以 http:// 开头
if %ERRORLEVEL%==0(
    echo http://%SERVER_IP%/%~nx1
)else (
    REM echo 图片上传失败: %~1
)

REM 处理下一个文件
shift
goto loop

:end
REM echo 所有文件处理完成

  1. 配置 scp 用户的权限

第一步中我们将 /var/www/html/images 的所有者改为了 www-data,权限为 755,那么当使用普通用户访问 scp 时,会出现权限不足的情况

1740138384288-a71e41c2-f472-47ab-b0ae-43aba9c93e9c.png

因此需要将当前用户加入 www-data 用户组,并为用户组分配写权限(775)

sudo usermod -aG www-data ubuntu //将 Ubuntu 用户加入 www-data 组
sudo chmod -R 775 /var/www/html/images/
  1. typora 配置

1740140821697-7672495b-8e95-4e59-bc84-4472ecc1f21d.png

直接输入脚本名即可,typora 文档中说,他会自动在后面加上图片的参数,可能是一个或多个,且取最后 n 个输出作为替换的网址,n 为自动输入的图片参数数量。

如果需要 markdown 文件名以及当前文件的绝对路径,可以使用 ${filename}${filepath} 参数

然后进行验证图片上传测试:

1740140951969-20023034-ee6f-4eb4-8dba-e11e631ab983.png

现在就可以愉快的玩耍了