【问题标题】:Cannot make new directories in FTP (C#)无法在 FTP 中创建新目录(C#)
【发布时间】:2017-07-28 15:26:49
【问题描述】:

我试图通过我制作的一个简单的 C# windows 应用程序将文件上传到我的 FTP 服务器 (EC2)。

我遇到的问题:如果目录已经存在,我可以在其中创建一个文件。但是,如果目录不存在,我无法创建目录。

我检查的内容:我仔细检查了写权限。我通过 WinSCP 登录,我可以在那里创建新目录而没有任何问题。我已授予用户权限。

我的代码:

private async void FileFTPUpload(string sourcefilepath, string folderPath) {
 String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/12/1.txt";
 Console.WriteLine("Ftp url : " + ftpurl);
 String ftpusername = "myUserName";
 String ftppassword = "myPassword";

 try {
  string filename = Path.GetFileName(sourcefilepath);
  string ftpfullpath = ftpurl;
  WebRequest ftp = WebRequest.Create(ftpurl);
  ftp.Method = WebRequestMethods.Ftp.MakeDirectory;
  ftp.Credentials = new NetworkCredential(ftpusername, ftppassword);

  ftp.Method = WebRequestMethods.Ftp.UploadFile;

  FileStream fs = File.OpenRead(sourcefilepath);
  byte[] buffer = new byte[fs.Length];
  fs.Read(buffer, 0, buffer.Length);
  fs.Close();

  Stream ftpstream = ftp.GetRequestStream();
  ftpstream.Write(buffer, 0, buffer.Length);
  ftpstream.Close();
 } catch (Exception ex) {
  Console.WriteLine("Exception Occurred : " + ex);
  //throw ex;
 }
}

现在,如果“trial/12/”存在,那么会生成 1.txt。否则,我会收到错误消息:

System.Net.WebException: The remote server returned an error: (553) File name not allowed.

我不确定发生了什么,没有发生什么。可以使用一些帮助。

谢谢。

编辑:当我这样做时: 字符串 ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "试用";

它不会创建目录。我只是制作了一个名为“trial”的文件。

这样做:

String ftpurl = @"ftp://xx.xxx.xxx.xxx/" + "trial/";

给出同样的错误 553

【问题讨论】:

  • 你设置了两次ftp.Method。因此从不使用第一个分配。这不起作用,您需要将代码分成两个请求。
  • 我已经更新了我的问题。也请看一下。

标签: c# amazon-ec2 ftp windows-applications


【解决方案1】:

您必须将代码分成两个请求。第一个应该创建目录,第二个应该上传文件。

var filePath = @"ftp://xx.xxx.xxx.xxx/trial/12/1.txt";
var credentials = new NetworkCredential(ftpusername, ftppassword);

{
    // create directory
    var directoryPath = Path.GetDirectoryName(filePath);
    var request = WebRequest.Create(directoryPath);
    request.Method = WebRequestMethods.Ftp.MakeDirectory;
    request.Credentials = credentials;
    using(var response = (FtpWebResponse)requestDir.GetResponse()) 
    {
        // TODO: handle errors
    }
}

{
    // upload file
    using (WebClient client = new WebClient())
    {
        client.Credentials = credentials;
        client.UploadFile(filePath, "STOR", sourcefilepath);
    }
}

【讨论】:

  • 非常感谢.. 成功了。只是不得不改变一些事情。源文件路径。伟大的! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
相关资源
最近更新 更多