jpveldtman Ответов: 0

Ошибка загрузки файла на FTP - сервер- ошибка 451


Привет ребята,
Я столкнулся с проблемой с моим FTP, чтобы загрузить файл на FTP-сервер.
Я продолжаю получать ошибку "удаленный сервер вернул ошибку: (451) локальная ошибка в обработке.
Я пробовал пассивный режим, но безуспешно. Любые рекомендации приветствуются.
Пожалуйста, смотрите мой код ниже:

private void Upload(string filename, string ftpServerIP, string ftpUser,string ftpPassword)
        {
            MakeDir(filename, ftpServerIP, ftpUser, ftpPassword);
            FileInfo fileInf = new FileInfo(filename);
            string uri = "ftp://" + ftpServerIP + "/" + Txt_TransferTo.Text+ "/" + fileInf.Name;
            FtpWebRequest FTPreq;
            FTPreq = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + Txt_TransferTo.Text+ "/" + fileInf.Name));
            FTPreq.Credentials = new NetworkCredential(ftpUser, ftpPassword);
            FTPreq.Method = WebRequestMethods.Ftp.MakeDirectory;
            FTPreq.KeepAlive = false;
            FTPreq.Method = WebRequestMethods.Ftp.UploadFile;
            FTPreq.UseBinary = true;
            FTPreq.ContentLength = fileInf.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            FileStream fs = fileInf.OpenRead();
            try
            {
                Stream strm = FTPreq.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
                InfoMessage("File uploaded succesfully", 1);
            }
            catch (Exception ex)
            {
                InfoMessage(ex.Message, 0);
            }
        }




private void MakeDir(string dirName, string ftpServerIP, string ftpUser, string ftpPassword)
        {
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + dirName));
                reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();

                ftpStream.Close();
                response.Close();
            }
            catch { }
        }

и я называю это через
Upload("filename", "ftp.XXXXX.XX.XX", "UserName", "Password");

но безрезультатно.
Спасибо

Sergey Alexandrovich Kryukov

Это клиентский код, но откуда вы знаете, что ваш FTP-сервер работает правильно? Вы пытались загрузить один и тот же файл в одно и то же место с помощью какого-нибудь доступного FTP-сервера? Что же происходит?
--СА

jpveldtman

Спасибо за ответ, что я могу добавить, это работает, если я использую, например, filezilla.Я еще не пробовал на другом FTP-сервере, если проблема с сервером, то я понятия не имею, что это может быть...

jpveldtman

Хорошо, я поиграл с usepassive и keepalive, но потом я получаю сообщение об ошибке, что файл не существует / у меня нет доступа. Но файл действительно существует, и у меня определенно есть доступ, я могу изменить файл вручную и т. д

jpveldtman

Я выяснил, что FTP чувствителен к регистру, если я добавляю его в папку(которая находится в верхнем регистре), но я ввожу нижний регистр, то это дает ошибку, что у меня нет доступа. Может ли кто-нибудь помочь увидеть, существует ли папка, и настроить ее на правильный случай?

Sergey Alexandrovich Kryukov

Чувствительность к регистру зависит от платформы. Вы можете проверить существование с помощью команд в FtpWebRequest; order directory list, и он даст вам папки.
--СА

jpveldtman

Спасибо, я запускаю его на Windows, но FTP-сервер основан на Linux,
Я использовал список каталогов, поэтому пользователь выбирает каталог вместо того, чтобы вводить его, Спасибо за вашу помощь.

Sergey Alexandrovich Kryukov

Ну, проблема заключается в следующем: хотя Windows не чувствительна к регистру, Linux, по-видимому, вам нужно использовать строгий регистр в именах файлов.
--СА

0 Ответов