Не удается подключиться к FTP: (553) Имя файла не разрешено - PullRequest
12 голосов
/ 23 февраля 2012

Мне нужно FTP файл в каталог. В .Net я должен использовать файл в папке назначения для создания соединения, поэтому я вручную помещаю Blank.dat на сервер, используя FTP. Я проверил доступ (ls -l), и это -rw-r - r--. Но когда я пытаюсь подключиться к папке FTP, я получаю: «Удаленный сервер возвратил ошибку: (553) Имя файла не разрешено» с сервера. Проведенное мной исследование говорит, что это может быть связано с проблемой разрешений, но, как я уже сказал, у меня есть разрешения на просмотр файла и я могу запустить ls из папки. Какие еще причины могут быть причиной этой проблемы, и есть ли способ подключения к папке без указания файла?

            byte[] buffer;
            Stream reqStream;
            FileStream stream;
            FtpWebResponse response;
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(new Uri(string.Format("ftp://{0}/{1}", SRV, DIR)));
            request.Method = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(UID, PASS);
            request.UseBinary = true;
            request.Timeout = 60000 * 2;
            for (int fl = 0; fl < files.Length; fl++)
            {
                request.KeepAlive = (files.Length != fl);
                stream = File.OpenRead(Path.Combine(dir, files[fl]));
                reqStream = request.GetRequestStream();
                buffer = new byte[4096 * 2];
                int nRead = 0;
                while ((nRead = stream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    reqStream.Write(buffer, 0, nRead);
                }
                stream.Close();
                reqStream.Close();

                response = (FtpWebResponse)request.GetResponse();
                response.Close();
            }

Ответы [ 9 ]

29 голосов
/ 27 июля 2012

Хотя, отвечая на старый пост, просто подумал, что это может кому-то помочь.

Когда вы создаете свой ftp url, убедитесь, что вы не включаете каталог по умолчанию для этого логина.

, например, этоэто был путь, который я указывал, и я получал исключение 553 FileName не допускает исключение

ftp://myftpip/gold/central_p2/inbound/article_list/jobs/abc.txt

Имя входа, которое я использовал, имело каталог по умолчанию gold / central_p2.so предоставленный URL стал недействительным, так как он пыталсячтобы найти весь путь в каталоге по умолчанию. Я изменил свою строку URL соответствующим образом и смог избавиться от исключения.

мой измененный URL выглядел как

ftp://myftpip/inbound/article_list/jobs/abc.txt

Спасибо,

Саб

7 голосов
/ 04 марта 2013

Это может помочь для FTP-сервера Linux.

Итак, FTP-серверы Linux в отличие от IIS не имеют общего корневого каталога FTP.Вместо этого при входе на FTP-сервер с учетными данными какого-либо пользователя используется корневой каталог этого пользователя.Итак, иерархия каталогов FTP начинается с / root / для пользователя root и с / home / username для других.

Итак, если вам нужно запросить файл не относительно домашнего каталога учетной записи пользователя, а относительно корня файловой системы, добавьте дополнительное / после имени сервера.Результирующий URL будет выглядеть так:

ftp://servername.net//var/lalala
2 голосов
/ 28 июля 2014

ваш каталог имеет ограничение доступа.
удалите ваш каталог, а затем создайте заново с этим кодом:

//create folder  
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://mpy1.vvs.ir/Subs/sub2");
request.Method = WebRequestMethods.Ftp.MakeDirectory;
request.Credentials = new NetworkCredential(username, password);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = true ;
using (var resp = (FtpWebResponse)request.GetResponse())
{

}
2 голосов
/ 13 ноября 2013

Вы должны быть осторожны с именами и путями:

 string FTP_Server = @"ftp://ftp.computersoft.com//JohnSmith/";
 string myFile="text1.txt";
 string myDir=@"D:/Texts/Temp/";

, если вы отправляете на ftp.computersoft.com / JohnSmith файл с именем text1.txt находится по адресу d: / тексты / темп

, затем

    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(FTP_Server+myFile);
    request.Method = WebRequestMethods.Ftp.UploadFile;                      

    request.Credentials = new NetworkCredential(FTP_User, FTP_Password);    

    StreamReader sourceStream = new StreamReader(TempDir+myFile);                  
    byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
    sourceStream.Close();

    Stream requestStream = request.GetRequestStream();
    requestStream.Write(fileContents, 0, fileContents.Length);              
    requestStream.Close();

обратите внимание, что в один момент вы используете в качестве пункта назначения

ftp: //ftp.computersoft.com//JohnSmith/text1.txt

, который содержит не только каталог, но и новое имя файла на FTP-сервере (что обычно можетотличаться от имени файла на жестком диске)

и в другом месте, которое вы используете в качестве источника

D: /Texts/Temp/text1.txt

1 голос
/ 24 августа 2018

Надеюсь, это кому-нибудь пригодится

если вы используете сервер LINUX, замените путь запроса с

FtpWebRequest req= (FtpWebRequest)WebRequest.Create(@"ftp://yourdomain.com//yourpath/" + filename);

до

FtpWebRequest req= (FtpWebRequest)WebRequest.Create(@"ftp://yourdomain.com//public_html/folderpath/" + filename);

путь к папке, как вы видите на сервере (например: cpanel)

1 голос
/ 23 февраля 2012

Некоторое время назад я видел нечто похожее на это, оказалось, что я пытался подключиться к внутреннему ftp-серверу iis, защищенному с помощью Active Directory.

В своих сетевых учетных данных я использовал новый NetworkCredential (@ "домен \ пользователь", "пароль"); и это терпело неудачу. Переключение на новый NetworkCredential («пользователь», «пароль», «домен»); работал на меня.

0 голосов
/ 22 марта 2018

У меня была эта проблема, когда я пытался писать в корневой каталог FTP-сайта программно. Когда я повторил операцию вручную, FTP автоматически перенаправил меня в подкаталог и завершил операцию записи. Затем я изменил свой код, добавив префикс целевого имени файла к подкаталогу, и операция прошла успешно.

0 голосов
/ 02 марта 2017

Другая причина этой ошибки может заключаться в том, что FTP-сервер чувствителен к регистру.Мне понадобилось время, чтобы разобраться.

0 голосов
/ 01 января 2015

Хотя это более старый пост, я подумал, что было бы хорошо поделиться своим опытом.Я столкнулся с той же проблемой, но решил ее сам.Основными двумя причинами этой проблемы является Ошибка в пути (если ваши разрешения правильные) возникает, когда ваш путь FTP неверен.Не видя вашего пути, невозможно сказать, что не так, но нужно помнить вещи a. Unlike browser FTP doesn't accept some special characters like ~ b. If you have several user accounts under same IP, do not include username or the word "home" in path c. Don't forget to include "public_html" in the path (normally you need to access the contents of public_html only) otherwise you may end up in a bottomless pit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...