Ошибка загрузки файла на 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, по-видимому, вам нужно использовать строгий регистр в именах файлов.
--СА