需求来源
- 喜欢绿化版软件
- 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)