【发布时间】:2017-03-27 10:40:22
【问题描述】:
我必须将文件上传到 ftp 站点。我可以使用 WINSCP
将文件传输到该 ftp 文件夹现在我正在尝试使用 c# 和下面的代码来做同样的事情
FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(
"ftp://ftps-xxxxx.xxx.xx.com:xxx/folder/text.txt");
ftpClient.Credentials = new System.Net.NetworkCredential("username", "password");
ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
ftpClient.UseBinary = true;
ftpClient.KeepAlive = true;
System.IO.FileInfo fi = new System.IO.FileInfo(@"C:\d\text.txt");
ftpClient.ContentLength = fi.Length;
byte[] buffer = new byte[4097];
int bytes = 0;
int total_bytes = (int)fi.Length;
System.IO.FileStream fs = fi.OpenRead();
ftpClient.KeepAlive = false;
ftpClient.Timeout = -1;
System.IO.Stream rs = ftpClient.GetRequestStream();
while (total_bytes > 0)
{
bytes = fs.Read(buffer, 0, buffer.Length);
rs.Write(buffer, 0, bytes);
total_bytes = total_bytes - bytes;
}
fs.Close();
rs.Close();
FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse();
string value = uploadResponse.StatusDescription;
uploadResponse.Close();
当它到达System.IO.Stream rs = ftpClient.GetRequestStream();
出现以下错误
远程服务器返回错误:(500) 语法错误,命令 无法识别。
【问题讨论】:
-
使用具有给定 URL 和凭据的传统客户端有效吗?为什么是
KeepAlive = true,然后是false? -
您可以轻松地简化您在 MSDN 中给出的转移请求:msdn.microsoft.com/en-us/library/ms229715(v=vs.110).aspx
-
@ArnaudF。刚刚尝试使用
false也忘记从一开始就删除true..也可以使用 WINSCP 客户端获取相同的 url 和凭据 -
Enable logging 给我们看日志 + 给我们看 WinSCP 日志。
-
您还声称您在使用 TLS/SSL 时遇到问题,但我在您的代码中没有看到您启用它的任何内容。
标签: c#-4.0 ftp file-transfer