错误,而上传文件到FTP服务器的C#(Error while Uploading file to F

2019-11-02 16:57发布

我想一个.txt文件上传到FTP服务器。 但我有一些问题。 我不断收到此错误: 远程服务器返回错误:(553)不允许的文件名。

这总是发生在这条线:

Stream writer = ftpReq.GetRequestStream();

我无法弄清楚的问题是什么。 我曾尝试与上传FileZilla的文件和工作正常。 我也试图文件目标网址从服务器复制并harcode到我的应用程序,但我仍然得到同样的错误。 是否有上传文件到FTP服务器的任何其他方式?

这是我的代码:

string localFilePath = @"\\fileprint\data\Groups\Operation\fileExports\folder\";
string archiveFilePath = @"\\fileprint\data\Groups\Operation\fileExports\folder\Archive\";
string logFilePath = @"C:\Users\lmy\Desktop\Logs";
string ftpServer = "ftp://my.server.no:21/home/pll332/tmp/";
private string logFileName = "" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Day.ToString();
string userName = "pll332";
string password = "password";

public Controller()
{
}

public void UploadFile()
{
    try
    {
        string[] files = Directory.GetFiles(localFilePath);
        foreach (string file in files)
        {
            string fileName = Path.GetFileName(file);
            FtpWebRequest ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServer + fileName));
            ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
            ftpReq.UsePassive = true;
            ftpReq.UseBinary = true;
            ftpReq.KeepAlive = true;
            ftpReq.Credentials = new NetworkCredential(userName.Normalize(), password.Normalize());

            FileInfo fileInfo = new FileInfo(localFilePath + @"\" + fileName);
            FileStream fileStream = fileInfo.OpenRead();

            byte[] fileContent = new byte[fileInfo.Length];
            fileStream.Read(fileContent, 0, Convert.ToInt32(fileInfo.Length));

            Stream writer = ftpReq.GetRequestStream();
            writer.Write(fileContent, 0, fileContent.Length);
            fileStream.Close();
            writer.Close();
            FtpWebResponse response = (FtpWebResponse)ftpReq.GetResponse();

            AppendLogFile(response, "Uploaded Files: ", fileName);
            MoveToArchive(file, archiveFilePath + fileName);
        }

    }
    catch (Exception exception)
    {
        Console.WriteLine(exception.Message);
    }
}

希望你们能帮助我。 谢谢!

编辑:我曾尝试这样的:

            string fileName = Path.GetFileName(file);
            UriBuilder uri = new UriBuilder();
            uri.Scheme = "ftp";
            uri.Host = "my.server.no";
            uri.Port = 21;
            uri.Path = "/home/username/tmp/";
            uri.UserName = "username";
            uri.Password = "password";
            FtpWebRequest ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri.ToString() + fileName));
            ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
            ftpReq.UsePassive = true;
            ftpReq.UseBinary = true;
            ftpReq.KeepAlive = true;
            ftpReq.Credentials = new NetworkCredential(userName.Normalize(), password.Normalize());

这给了我同样的错误......

Answer 1:

我终于找到了错误的原因。 看来,服务器我试图上传到了Linux服务器。 我发现,在如何解决这个问题的一个论坛的描述。 而这是写在论坛:

这可能有助于为Linux FTP服务器。

因此,与IIS的Linux FTP服务器不具有共同的FTP根目录。 取而代之的是,当你在一些用户的凭据登录到FTP服务器,使用该用户的根目录。 所以FTP目录结构开始从/根/根用户和他人的/ home /用户名。 所以,如果你需要查询不是相对于用户帐户的主目录,但是相对于文件系统的根目录的文件,添加一个额外的/后的服务器名称。 结果URL将类似于:

ftp://servername.net//var/lalala

所以,当我改变了我的连接URI来自:

ftp://username:password@my.server.no:21/home/username/tmp/

至:

ftp://username:password@my.server.no:21//home/username/tmp/

(注意我已经增加了额外的/之前的/ home /用户名/ tmp目录/)

然后我的工作!



文章来源: Error while Uploading file to FTP server C#