我使用以下代码示例将数据上传到FTP服务器。
var streamXml = new MemoryStream();
var writer = new StreamWriter(streamXml);
writer.Write(stringaXml);
writer.Flush();
streamXml.Position = 0;
var response = client.UploadData(remoteFilePath, ReadFully(streamXml));
Logger.Info(client.Encoding.GetString(response));
public static byte[] ReadFully(Stream input)
{
var buffer = new byte[16 * 1024];
using (var ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
文件已成功转移,但response
始终为byte[0]
我在这里遗漏了什么吗?
更新
我用这种方式修改了ReadFully
方法:
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
我的小型XML文件已成功保存到FTP服务器,但response
仍为byte[0]
答案 0 :(得分:-1)
我检查了RFC的FTP(http://tools.ietf.org/html/rfc959),然后说
The data, when transferred in response to FTP service commands, shall always be sent over the data connection, except for certain informative replies.
看起来它正在使用另一个端口(默认为20)发送响应,这就是您无法接收它的原因。
您没有提到 client 对象的类型,但我建议您使用内置的 FTPWebRequest 类来执行FTP操作。以下是如何使用它上传文件的示例:MSDN How to: Upload Files with FTP
<强>更新强>
我测试了上面文章中的示例代码,我能够通过FtpWebResponse.StatusDescription获取服务器的响应消息,例如
“226已成功转移\”/ newFile.txt \“\ r \ n”
这正是OP想要的
答案 1 :(得分:-1)
FTP上传(与HTTP上传相反)不能有任何响应体。所以WebClient.UploadData
永远不会为FTP返回任何内容。
您期望得到什么样的回应? FTP服务器返回的所有内容都是状态消息。如果它返回成功,WebClient.UploadData
将以静默方式返回。如果它作为错误返回,则WebClient.UploadData
将引发状态消息的异常。
例如:
发生了'System.Net.WebException'类型的未处理异常 System.dll中
其他信息:远程服务器返回错误:(550) 文件不可用(例如,找不到文件,无法访问)。