我使用下面的代码示例将数据上载到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]。
发布于 2015-07-21 13:42:21
我检查了RFC的FTP (https://www.rfc-editor.org/rfc/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如何:使用FTP上载文件
更新:
我在上面的文章中测试了示例代码,并且我能够通过FtpWebResponse.StatusDescription获得服务器的响应消息,如
"226成功转移"/newFile.txt"\r\n“
这正是OP想要的
发布于 2015-07-21 15:03:01
FTP上载(与HTTP上载相反)不能有任何响应体。因此,WebClient.UploadData从不为FTP返回任何内容。
你希望得到什么样的回应?FTP服务器返回的所有内容都是状态消息。如果返回成功,WebClient.UploadData将默默地返回。如果返回为error,则WebClient.UploadData将抛出带有状态消息的异常。
例如:
System.Net.WebException类型的未处理异常发生在System.dll中 附加信息:远程服务器返回一个错误:(550)文件不可用(例如,文件未找到,无法访问)。
https://stackoverflow.com/questions/31535307
复制相似问题