【问题标题】:Using ftp in C# to send a file在 C# 中使用 ftp 发送文件
【发布时间】:2010-05-05 11:28:22
【问题描述】:

我正在尝试使用 ftp 发送文件。我有以下代码:

string server = "x.x.x.x";  // Just the IP Address 

FileStream stream = File.OpenRead(filename);
byte[] buffer = new byte[stream.Length];

WebRequest request = WebRequest.Create("ftp://" + server);
request.Method = WebRequestMethods.Ftp.UploadFile;            
request.Credentials = new NetworkCredential(username, password);

Stream reqStream = request.GetRequestStream(); // This line fails
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();

但是当我运行它时,我得到以下错误:

请求的 URI 对于此 FTP 命令无效。

请谁能告诉我为什么?我是不是用错了?

【问题讨论】:

  • server 长什么样子?
  • @thelost - 不恰当的问题...他不能告诉我们 ftp...它可能是公开的...您可以使用临时字符串来检查完整的服务器 URI 是否应有是。其余的看起来不错。

标签: c# .net ftp


【解决方案1】:

我认为您还需要指定要上传的路径和文件名,所以我认为它应该是:

WebRequest request = WebRequest.Create("ftp://" + server + "/");

WebRequest request = WebRequest.Create("ftp://" + server + "/filename.ext");

【讨论】:

  • 第一个给出了同样的错误,但是一旦指定了文件名,它就可以正常工作-谢谢
  • @ho1 谢谢。仅供参考:如果您要上传到文件夹,那么它应该像 WebRequest request = WebRequest.Create("ftp://" + server + "//foldername" +"/filename.ext");
【解决方案2】:

当我不得不使用 ftp 方法时,我不得不在请求对象上设置一些标志,没有它该功能不起作用:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath);
request.KeepAlive = true/false;
request.UsePassive = true/false;
request.UseBinary = xxx;

这些标志取决于服务器,如果您无法访问服务器,那么您无法知道在此处使用什么,但您可以测试并查看配置中的工作原理。

而且 URI 末尾可能缺少文件名,以便服务器知道上传文件的保存位置。

【讨论】:

  • 这些标志似乎不是 WebRequest 对象的属性
  • @pm_2:抱歉,我忘了在创建请求对象的位置添加一行。它实际上是一个 FtpWebRequest 类型的对象。我更新了答案以显示它。
猜你喜欢
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
相关资源
最近更新 更多