Загрузить файл на ftp

Я хочу загрузить файл с одного сервера на другой ftp-сервер, а следующий – мой код для загрузки файла, но он выдает ошибку как: {«Удаленный сервер возвратил ошибку: (550) Файл недоступен (например, файл не найден, нет доступ). “}

Этот мой код:

string CompleteDPath = "ftp URL"; string UName = "UserName"; string PWD = "Password"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName); reqObj.Method = WebRequestMethods.Ftp.UploadFile; reqObj.Credentials = new NetworkCredential(UName, PWD); FileStream streamObj = System.IO.File.OpenRead(Server.MapPath(FileName)); byte[] buffer = new byte[streamObj.Length + 1]; streamObj.Read(buffer, 0, buffer.Length); streamObj.Close(); streamObj = null; reqObj.GetRequestStream().Write(buffer, 0, buffer.Length); reqObj = null; 

Не могли бы вы рассказать мне, где я ошибаюсь?

Убедитесь, что ваш ftp-путь установлен, как показано ниже.

 string CompleteDPath = "ftp://www.example.com/wwwroot/videos/"; string FileName = "sample.mp4"; WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName); 

Следующий скрипт отлично работает со мной для загрузки файлов и видео в другой servier через ftp.

 FtpWebRequest ftpClient = (FtpWebRequest)FtpWebRequest.Create(ftpurl + "" + username + "_" + filename); ftpClient.Credentials = new System.Net.NetworkCredential(ftpusername, ftppassword); ftpClient.Method = System.Net.WebRequestMethods.Ftp.UploadFile; ftpClient.UseBinary = true; ftpClient.KeepAlive = true; System.IO.FileInfo fi = new System.IO.FileInfo(fileurl); ftpClient.ContentLength = fi.Length; byte[] buffer = new byte[4097]; int bytes = 0; int total_bytes = (int)fi.Length; System.IO.FileStream fs = fi.OpenRead(); System.IO.Stream rs = ftpClient.GetRequestStream(); while (total_bytes > 0) { bytes = fs.Read(buffer, 0, buffer.Length); rs.Write(buffer, 0, bytes); total_bytes = total_bytes - bytes; } //fs.Flush(); fs.Close(); rs.Close(); FtpWebResponse uploadResponse = (FtpWebResponse)ftpClient.GetResponse(); value = uploadResponse.StatusDescription; uploadResponse.Close(); 

Вот пример кода для загрузки файла на FTP-сервере

  string filename = Server.MapPath("file1.txt"); string ftpServerIP = "ftp.demo.com/"; string ftpUserName = "dummy"; string ftpPassword = "dummy"; FileInfo objFile = new FileInfo(filename); FtpWebRequest objFTPRequest; // Create FtpWebRequest object objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + objFile.Name)); // Set Credintials objFTPRequest.Credentials = new NetworkCredential(ftpUserName, ftpPassword); // By default KeepAlive is true, where the control connection is // not closed after a command is executed. objFTPRequest.KeepAlive = false; // Set the data transfer type. objFTPRequest.UseBinary = true; // Set content length objFTPRequest.ContentLength = objFile.Length; // Set request method objFTPRequest.Method = WebRequestMethods.Ftp.UploadFile; // Set buffer size int intBufferLength = 16 * 1024; byte[] objBuffer = new byte[intBufferLength]; // Opens a file to read FileStream objFileStream = objFile.OpenRead(); try { // Get Stream of the file Stream objStream = objFTPRequest.GetRequestStream(); int len = 0; while ((len = objFileStream.Read(objBuffer, 0, intBufferLength)) != 0) { // Write file Content objStream.Write(objBuffer, 0, len); } objStream.Close(); objFileStream.Close(); } catch (Exception ex) { throw ex; } 

Вы также можете использовать тип WebClient более высокого уровня для работы с WebClient FTP с более чистым кодом:

 using (WebClient client = new WebClient()) { client.Credentials = new NetworkCredential(ftpUsername, ftpPassword); client.UploadFile("ftp://ftpserver.com/target.zip", "STOR", localFilePath); } 

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

Мой ftp url выглядел так:

 // ftp://www.mywebsite.com/testingdir/myData.xml FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.mywebsite.com/testingdir/myData.xml" 

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

 request.Credentials = new NetworkCredential ("tester", "testerpw"); 

Ну, мой счетчик ftp-тестера установлен на « ftp://www.mywebsite.com/testingdir », но когда я на самом деле ftp [скажу из проводника], я просто помещаю « ftp://www.mywebsite.com » и войдите в систему с моими учетными данными и автоматически отправьте «testdir».

Итак, чтобы сделать эту работу на C #, я закончил с использованием url – ftp://www.mywebsite.com/myData.xml. При условии, что мои учетные данные проверяют учетную запись, и все работает нормально.

  public void UploadImageToftp() { string server = "ftp://111.61.28.128/Example/"; //server path string name = @"E:\Apache\htdocs\visa\image.png"; //image path string Imagename= Path.GetFileName(name); FtpWebRequest request = (FtpWebRequest)WebRequest.Create(new Uri(string.Format("{0}{1}", server, Imagename))); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential("username", "password"); Stream ftpStream = request.GetRequestStream(); FileStream fs = File.OpenRead(name); byte[] buffer = new byte[1024]; int byteRead = 0; do { byteRead = fs.Read(buffer, 0, 1024); ftpStream.Write(buffer, 0, byteRead); } while (byteRead != 0); fs.Close(); ftpStream.Close(); MessageBox.Show("Image Upload successfully!!"); } 
  • Как можно печатать переменную size_t портативно с помощью семейства printf?
  • Почему свойство Set выбрасывает исключение StackOverflow?
  • Бизнес-объекты, проверки и исключения
  • Создание Qt5 с Visual Studio 2012 / Visual Studio 2013 и интеграция с IDE
  • Ошибка десериализации Xml в Object - xmlns = '' не ожидалось
  • Каков окончательный формат для интерполяции строк в VS 2015?
  • Легкий способ использовать переменные типов enums как строку в C?
  • Как настроить тайм-аут подключения сокетов
  • Как использовать интерфейс как ограничение типа C #?
  • Есть ли стандартный class даты / времени в C ++?
  • Безопасное переопределение виртуальных функций C ++
  • Давайте будем гением компьютера.