WebClient.UploadData返回字节[0]为FTP
本文关键字:FTP UploadData 返回 字节 WebClient | 更新日期: 2023-09-27 18:03:40
我使用下面的代码示例将数据上传到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]
FTP上传(与HTTP上传相反)不能有任何响应体。所以WebClient.UploadData
永远不会为FTP返回任何东西。
你期望什么样的反应?所有FTP服务器返回的都是状态消息。如果返回成功,则WebClient.UploadData
静默返回。如果它作为错误返回,WebClient.UploadData
抛出一个带有状态消息的异常。
System.Net类型的未处理异常。webeexception '发生在System.dll
附加信息:远程服务器返回一个错误:(550)文件不可用(例如,文件未找到,无法访问)。
我检查了FTP (https://www.rfc-editor.org/rfc/rfc959)的RFC,它说
The data, when transferred in response to FTP service commands, shall always be sent over the data connection, except for certain informative replies.
看起来它正在使用另一个端口(默认为20)来发送响应,这就是为什么你不能接收它。
您没有提到客户端对象是什么类型,但我建议使用内置的FTPWebRequest类来执行FTP操作。下面是一个如何使用它来上传文件的示例:MSDN如何:使用FTP上传文件
更新:
我测试了上面文章中的示例代码,并且能够通过FtpWebResponse获得服务器的响应消息。StatusDescription,如226传输成功"/newFile.txt"'r'n"
这正是OP想要的