
常用 typora 的都知道,他的图片文件默认存储在本地,因此当把 md 文件转发时,图片会丢失
网上大多数的文章都是通过 picgo 等图床工具+oss 来解决这个问题
但是我觉得在不同电脑上都要下载 picgo 重新配置太过麻烦,因此想要直接通过 typora 的自定义命令将图片上传到云服务器
解决方案:本地通过 cmd 或者 powershell 脚本的形式,将 typora 图片使用 scp 复制到服务器上,配置 nginx 通过 http 就可以正常访问图片
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 # 使其具有适当的读写权限
在 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; # 显示目录列表
}
}
注意要将二级域名解析到云服务器
或者不想使用二级域名,也可以跟参数,比如域名后面加 /images/,那么 nginx 配置文件得更改。
更改完后
nginx -t //检查语法是否正确
sudo systemctl reload nginx //重启 nginx 服务
在本地执行命令生成 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
写 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 所有文件处理完成
第一步中我们将 /var/www/html/images 的所有者改为了 www-data,权限为 755,那么当使用普通用户访问 scp 时,会出现权限不足的情况

因此需要将当前用户加入 www-data 用户组,并为用户组分配写权限(775)
sudo usermod -aG www-data ubuntu //将 Ubuntu 用户加入 www-data 组
sudo chmod -R 775 /var/www/html/images/

直接输入脚本名即可,typora 文档中说,他会自动在后面加上图片的参数,可能是一个或多个,且取最后 n 个输出作为替换的网址,n 为自动输入的图片参数数量。
如果需要 markdown 文件名以及当前文件的绝对路径,可以使用 ${filename}、${filepath} 参数
然后进行验证图片上传测试:

现在就可以愉快的玩耍了