Что не так с моим кодом ftp? - PullRequest
4 голосов
/ 05 мая 2010

Я использую c # в .NEt 2.0, чтобы просто попытаться загрузить файл. В коде все выглядит нормально, но при попытке создания потока из метода FtpWebRequest.GetRequestStream происходит сбой.

Вот код ...

        FtpWebRequest ftpRequest;
        FtpWebResponse ftpResponse;

        try
        {
            string fileName = Path.GetFileName(strCompleteFilePath);
            ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));
            ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
            ftpRequest.Proxy = null;
            ftpRequest.UseBinary = true;
            ftpRequest.Credentials = new NetworkCredential("myUserID", "myPW");
            ftpRequest.KeepAlive = false;

            FileInfo ff = new FileInfo(strCompleteFilePath);
            byte[] fileContents = new byte[ff.Length];

            using (FileStream fr = ff.OpenRead()) 
            {
                fr.Read(fileContents, 0, Convert.ToInt32(ff.Length));
            }

            using (Stream writer = ftpRequest.GetRequestStream())
            {
                writer.Write(fileContents, 0, fileContents.Length);
            }

            ftpResponse = (FtpWebResponse)ftpRequest.GetResponse(); 
        }

и ошибка ....

{System.Net.WebException: The remote server returned an error: (501) Syntax error in parameters or arguments.
   at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
   at System.Net.FtpWebRequest.RequestCallback(Object obj)
   at System.Net.CommandStream.InvokeRequestCallback(Object obj)
   at System.Net.CommandStream.Abort(Exception e)
   at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
   at System.Net.FtpWebRequest.GetRequestStream()

Ответы [ 5 ]

5 голосов
/ 05 мая 2010

Вам не хватает / в пути.

Вы собираетесь создать путь ftp://myhostmyfile.txt, если ваш файл назывался «myfile.txt», который, как я предполагаю, должен быть ftp://myhost/myfile.txt

Поэтому просто добавьте / в конец строки ftp://myhost.

4 голосов
/ 05 мая 2010

Это выглядит неправильно:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

Если содержимое имени файла не начинается с / Я думаю, вам нужно добавить один из них, чтобы оно выглядело как:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));
3 голосов
/ 05 мая 2010

Линия:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

Может возникнуть проблема, если ваша переменная fileName не содержит необходимых косых черт.

1 голос
/ 13 октября 2014

Попробуйте

ftpRequest.UsePassive = false;

у меня это работает.

1 голос
/ 05 мая 2010

FTP-сервер недоволен командой STOR, которую генерирует .NET. Лучшее место для поиска - файл журнала для сервера. Принимая дикие предположения: путь необычен, вы обычно хотите указать имя каталога (например, ftp: // myhost / somedir / filename )

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