请,我需要帮助只将当前目录中的当前日文件加载到SFTP服务器。显然,SSIS中的FTP任务无法移动到SFTP,只能移动到FTP。
此外,我有FileZilla。我可以在SSIS中使用FileZilla吗?或者我可以自动使FileZilla在特定时间发送文件吗? (使用Windows 10)
答案 0 :(得分:4)
您无法使用FileZilla。 FileZilla不支持任何类型的脚本。
还有许多其他可编写脚本的SFTP客户端。
使用WinSCP可以轻松完成任务,因为它具有选择今天文件的语法。
您可以使用以下批处理文件:
winscp.com /ini=nul /command ^
"open sftp://username:password;fingerprint=hostkeyfingerprint@example.com/" ^
"put -filemask=*>=today ""c:\local\path\*"" ""/remote/path/""" ^
"exit"
WinSCP 5.15仅支持>=today
keyword,仅支持更新。
在旧版本中,您可以使用%TIMESTAMP%
syntax,尤其是>=%%TIMESTAMP#yyyy-mm-dd%%
,而不是>=today
。
您可以拥有WinSCP GUI generate the batch file template for you,包括host key fingerprint part。
参考文献:
您可以use the script in SSIS或schedule it with Windows scheduler。
(我是WinSCP的作者)
答案 1 :(得分:0)
您可以使用Winscp的SSIS脚本任务,使用Winscp在FTP上传文件,并安排ssis包的作业
在脚本任务中使用以下代码
string winscpPath = Dts.Variables["winSCPPath"].Value.ToString();
string username = Dts.Variables["ftpUsername"].Value.ToString();
string password = Dts.Variables["ftpPassword"].Value.ToString();
string ftpSite = Dts.Variables["ftpSite"].Value.ToString();
string localPath = Dts.Variables["localPath"].Value.ToString();
string remoteFTPDirectory = Dts.Variables["remoteFTPDirectory "].Value.ToString();
string sshKey = Dts.Variables["sshKey"].Value.ToString();
Boolean winSCPLog = (Boolean)Dts.Variables["winSCPLog"].Value;
string winSCPLogPath = Dts.Variables["winSCPLogPath"].Value.ToString();
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = ftpSite,
UserName = username,
Password = password,
SshHostKeyFingerprint = sshKey
};
try
{
using (Session session = new Session())
{
// WinSCP .NET assembly must be in GAC to be used with SSIS,
// set path to WinSCP.exe explicitly, if using non-default path.
session.ExecutablePath = winscpPath;
session.DisableVersionCheck = true;
if(winSCPLog)
{
session.SessionLogPath = @winSCPLogPath + @"WinscpSessionLog.txt";
session.DebugLogPath = @winSCPLogPath + @"WinscpDebugLog.txt";
}
// Connect
session.Timeout = new TimeSpan(0,2,0); // two minutes
session.Open(sessionOptions);
TransferOptions transferOptions = new TransferOptions();
transferOptions.TransferMode = TransferMode.Binary;
try
{
session.GetFiles(remoteFTPDirectory + "/" +
fileToDownload, localPath, false, transferOptions);
}
catch (Exception e)
{
Dts.Events.FireError(0, null,
string.Format("Error when using WinSCP to download file: {0}", e), null, 0);
Dts.TaskResult = (int)DTSExecResult.Failure;
}
}
}
Dts.TaskResult = (int)ScriptResults.Success;