WebClient.UploadData返回FTP的字节[0]

时间:2015-07-21 09:31:28

标签: c# ftp webclient

我使用以下代码示例将数据上传到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]

2 个答案:

答案 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)   文件不可用(例如,找不到文件,无法访问)。