Typora自定义命令图片上传
侧边栏壁纸
  • 累计撰写 62 篇文章
  • 累计收到 47 条评论

Typora自定义命令图片上传

Skycyan
2023-10-31 / 0 评论 / 76 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月31日,已超过570天没有更新,若内容或图片失效,请留言反馈。

需求来源

  1. 喜欢绿化版软件
  2. picgo命令行是也是要NPM环境

Python实现

请自行替换代码中的返回链接部分

# -*- coding: utf-8 -*-
import argparse
import paramiko
import os

def sftp_upload(hostname, port, username, password, *args):
    transport = paramiko.Transport((hostname, port))
    transport.connect(username=username, password=password)
    sftp = paramiko.SFTPClient.from_transport(transport)
    if sftp:
        print("STFP Connect Success")
        print("Upload Success:")
        current_dir = sftp.getcwd() or sftp.normalize('.')
        for local_file_path in args:
            if local_file_path:
                if os.path.isfile(local_file_path):
                    remote_path = os.path.join(current_dir,"web/"+os.path.basename(str(local_file_path)))
                    sftp.put(local_file_path, remote_path)
                    print(f"https://pic.skycyan.cn/{os.path.basename(local_file_path)}")
                else:
                    print(f"File {local_file_path} does not exist.")

    sftp.close()
    transport.close()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='SFTP 文件上传')
    parser.add_argument('hostname', type=str, help='SFTP服务器主机名或IP地址')
    parser.add_argument('port', type=int, help='SFTP服务器端口号')
    parser.add_argument('username', type=str, help='SFTP服务器用户名')
    parser.add_argument('password', type=str, help='SFTP服务器密码')
    parser.add_argument('file_paths', nargs='*', type=str, help='要上传的文件路径')
    args = parser.parse_args()

    sftp_upload(args.hostname, args.port, args.username, args.password, *args.file_paths)

C#实现

C #增了参数传递远程路径的功能

using System;
using Renci.SshNet;

if (args.Length < 4)
{
    Console.WriteLine("Usage: SftpUpload <host>主机地址 <port>端口 <username>用户名 <password>密码 <remoteRootPath>远程路径 <localFilePath>本地文件路径 ");
    return;
}

string host = args[0];
int port = int.Parse(args[1]);
string username = args[2];
string password = args[3];
string remoteRootPath = args[4];
string[] filePathArgs = new ArraySegment<string>(args, 5, args.Length - 5).ToArray();
Console.WriteLine("Upload Success:");
foreach (string filePathArg in filePathArgs)
{
    try
    {
        using (var client = new SftpClient(host, port, username, password))
        {
            client.Connect();
            using (var fileStream = System.IO.File.OpenRead(filePathArg))
            {
                string remoteFilePath = System.IO.Path.GetFileName(filePathArg);
                client.UploadFile(fileStream, $"{remoteRootPath}/{remoteFilePath}");

                
                Console.WriteLine($"https://pic.skycyan.cn/{remoteFilePath}");
            }

            client.Disconnect();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Error: " + ex.Message);
    }
}

成品下载

0

评论 (0)

取消