【发布时间】:2016-06-25 13:49:13
【问题描述】:
我正在尝试将.csv 格式的 SQL Server 数据转储到远程 FTP 服务器。直接上传文件绝对没问题。例如。如果我将文件上传为ftp://ftp.ftpservername/mySqlData.csv,则文件上传很容易。但是,我每天都会在任务调度程序上运行这个数据转储过程,每个.csv 文件都将存储在一个以日期为名称的文件夹中。
我正在使用WebRequest 通过MakeDirectory 方法完成此操作。所以简而言之,我可以上传文件但不能创建新的文件夹/目录。 简单的读/写权限是否足以创建目录? Ftp 服务器已启用 SSL,并且正在使用被动模式传输数据。我正在使用以下代码创建目录,但我得到了眼睛疼 (550) 拒绝访问错误。
public static string MakeDirectory()
{
try
{
Uri ftpUri = new Uri(@"ftp://ftp3.ftpserver.com:portnum/TestFolder");
FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpUri);
request.Credentials = new NetworkCredential(FtpUsername, FtpPassword);
request.Timeout = -1;
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = false;
ServicePointManager.ServerCertificateValidationCallback = AcceptAllCertifications;
request.Method = WebRequestMethods.Ftp.MakeDirectory;
using (var response = (FtpWebResponse)request.GetResponse())
{
return ftpUri.ToString();
}
}
catch (Exception ex)
{
throw ex;
}
}
【问题讨论】:
-
是的,服务器端决定了每次使用能做什么,不能做什么。你看到异常了吗?请注意,您可能无法使用被动模式来创建文件夹,但我不记得在我的职业生涯中那么久。如果您运行通信跟踪,您将能够看到谁立即结束了会话。如果是服务器,那么你知道的足够多,可以问服务器人员几个问题,例如会话初始化可能工作正常,这告诉你“你进入了”。如果会话在您尝试创建文件夹时结束,那么这很可能是被动模式问题或权限问题。
-
@JohnPeters 我禁用了 PassiveMode 并再次尝试,但我得到了同样的错误。接下来我安装了 WinSCP 并尝试在 FTP 服务器中创建一个新文件夹,我收到以下消息:
Operation is not supported under Connect:Enterprise FTP server.其次,我检查了 InnerException 以获取更多详细信息,在Response的banner属性中,我可以查看 FTP 服务器的名称。所以我确信我的代码正在连接到服务器,但在创建文件夹时会抛出错误。所以我相信这是你提到的权限问题。将进一步调查权限。谢谢约翰! -
@JohnPeters 你好约翰!你完全正确。存在权限问题。有一些特定于创建文件夹的权限,这些权限需要提供给 FTP 客户端来创建文件夹,类似于我们在 Windows 资源管理器中的权限。提供这些权限解决了这个问题。非常感谢!
标签: c# ftp permissions directory remote-server