-
Notifications
You must be signed in to change notification settings - Fork 1
SFPT C#
DUONG Phu-Hiep edited this page Jun 2, 2017
·
1 revision
Install the WinSCP package
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="WinSCP" version="5.7.7" targetFramework="net45" />
...
</packages>
private static void SftpUpload(string fileToUpload)
{
var sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = ConfigReader.Read("Sftp.Host", "79.116.15.21"),
PortNumber = ConfigReader.Read("Sftp.Port", 8241),
UserName = ConfigReader.Read("Sftp.User", "hiep"),
Password = ConfigReader.Read("Sftp.Password", "123456"),
SshHostKeyFingerprint = ConfigReader.Read("Sftp.Fingerprint", "ssh-rsa 2048 86:78:56:a3:ff:1f:0f:74:c5:ea:2f:92:49:79:82:39")
};
var fileInfo = new FileInfo(fileToUpload);
if (!fileInfo.Exists)
{
throw new InvalidOperationException("Try to upload a non-exist file: " + fileToUpload);
}
var tempFile = Path.GetTempFileName();
File.Copy(fileToUpload, tempFile, true);
Log.Debug($"copy to tempFile {tempFile}");
try
{
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
var transferOptions = new TransferOptions
{
TransferMode = TransferMode.Automatic
};
TransferOperationResult transferResult;
var remoteFolder = ConfigReader.Read("Sftp.RemoteFolder", "");
if (!remoteFolder.EndsWith("/"))
{
remoteFolder += "/";
}
transferResult = session.PutFiles(tempFile, remoteFolder + fileInfo.Name, false, transferOptions);
// Throw on any error
transferResult.Check();
// Print results
foreach (TransferEventArgs transfer in transferResult.Transfers)
{
Log.InfoFormat("Uploaded {0}", transfer.FileName);
}
}
}
finally
{
File.Delete(tempFile);
Log.Debug($"clean tempFile {tempFile}");
}
}