【发布时间】:2017-05-05 18:39:03
【问题描述】:
我在将大文件发送到 FTP 站点时遇到问题,我想在传输后检查文件大小(有时它可以工作,有时它会失败)。传输在 SSIS 内,我在 C# 中使用 Dts.Connections。
我的代码:
public long TransferFile(string file)
{
long filesize = 0L;
try
{
string[] newfile = new[] { file };
ConnectionManager ftpCM = Dts.Connections["ftp_server"];
string remoteDir = Dts.Variables["FtpWorkingDirectory"].Value.ToString();
FtpClientConnection ftpClient = new FtpClientConnection(ftpCM.AcquireConnection(null));
ftpClient.UsePassiveMode = true;
ftpClient.Connect();
ftpClient.Retries = 10;
ftpClient.SetWorkingDirectory(remoteDir);
ftpClient.SendFiles(newfile, remoteDir, true, false);
ftpClient.Close();
}
catch (Exception ex)
{
throw ex;
}
return filesize;
}
我找到了使用 FtpWebRequest 的示例,但我没有可用的 ftp uri,所以我不知道如何使用此方法。我怎样才能得到这个文件大小?
更新: 添加这个:
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpCM.ConnectionString + remoteDir + "/" + file));
request.Proxy = null;
DtsProperty ServerUsername = ftpCM.Properties["ServerUserName"];
DtsProperty ServerPassword = ftpCM.Properties["ServerPassword"];
request.Credentials = new NetworkCredential(ServerUsername.GetValue(ftpCM).ToString(), ServerPassword.GetValue(ftpCM).ToString());
request.Method = WebRequestMethods.Ftp.GetFileSize;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
filesize = response.ContentLength;
response.Close();
我收到错误:属性 ServerPassword 是只写的。
【问题讨论】:
-
ftpCM 应该是 uri。
-
“我没有可用的 ftp uri” - 你是什么意思? URL 只是另一种提供 FTP 连接所需的连接信息的格式! - 如
ftp://username:password@hostname甚至ftp://hostname,如果您通过request.Credentials = new NetworkCredential(...)单独提供用户名/密码。 -
你从哪里得到“属性 ServerPassword 是只写的。”? - 正是!