Еще одно решение, если вы уже используете GuzzleHttp .
Это решение основано на внутреннем методе GuzzleHttp\Client
.
use GuzzleHttp\Psr7;
function resolve(string $uri, ?string $base_uri): string
{
$uri = Psr7\uri_for($uri);
if (isset($base_uri)) {
$uri = Psr7\UriResolver::resolve(Psr7\uri_for($base_uri), $uri);
}
// optional: set default scheme if missing
$uri = $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri;
return (string) $uri;
}
Не глядя на файлы журнала, трудно сказать, в чем проблема.
Однако имейте в виду, что SCP - это не SFTP - это совершенно разные протоколы, работающие по SSH. Возможно, ваш SFTP не поддерживает SCP - не все серверы SFTP поддерживают. CoreFTP может использовать SFTP.
Наш коммерческий пакет, edtFTPnet / PRO , также стоит попробовать, хотя бы в качестве альтернативы, чтобы попытаться заставить другого клиента работать против вашего сервера.
Я использую Tamir.SharpSSH - последнюю версию 1.1.1.13
Это класс SFTP. Вы можете использовать этот класс напрямую для SFTP вместо использования JSch, Session class.
Быстрый пример здесь:
127.0.0.1 - IP-адрес сервера
/ SFTPFolder1 / SFTPFolder2 - Местоположение сервера, куда я хочу поместить мои файлы
Sftp sftpClient = new Sftp("127.0.0.1", "myuserName", "MyPassword");
sftpClient.Connect();
sftpClient.Put(@"C:\Local\LocalFile.txt", "/SFTPFolder1/SFTPFolder2");
Сообщите мне, если у вас возникнут проблемы.