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

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

The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

Это мой код:

<code>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; 
</code>

Можете ли вы сказать мне, где я иду не так?

 Mark Byers14 апр. 2012 г., 08:53
Какова стоимостьFileName? Какой адрес файла вы пытаетесь получить? Уверены ли выCompleteDPath + FileName дает вам то, что вы хотите?
 R.D.14 апр. 2012 г., 08:57
@Mark Byers: FileName - это место, где файл существует на одном сервере и его нужно перенести на другой сервер. CompleteDPath = это путь к другому серверу, на который необходимо передать файл.
 Jack14 апр. 2012 г., 09:01
Нет ... он спрашивает, какое значение вы передаете пути и имени файла. По какому пути вы пытаетесь пройти?
 R.D.14 апр. 2012 г., 09:28
@GregHNZ: Да, имя пользователя и пароль верны, так как я пытался соединиться с Filezila
 GregHNZ14 апр. 2012 г., 09:05
Проверяли ли вы вручную, что ваше имя пользователя & amp; пароль есть разрешение на запись? Может быть, стоит выйти из системы CompleteDPath + FileName, чтобы убедиться, что он создает достойный URL - завершает ли CompleteDPath символ /

Ответы на вопрос(7)

Вот пример кода для загрузки файла на 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;
    }
 02 июл. 2014 г., 10:35
Вы можете получить пароль из файла конфигурации, такого как web.config или app.config, или из реестра.
 10 февр. 2016 г., 11:05
Это будет работать дляASP.NET web application который размещен на сервере, и файл будет принятHTML input type=file тег
 23 янв. 2014 г., 04:07
Есть идеи, как безопасно загружать файлы на FTP-сервер? Я имею в виду, не оставляя в коде пароль сервера.
 01 июл. 2014 г., 18:43
Вы можете прочитать на своем сервере пароль из какого-либо источника вне кода (такого как файл конфигурации или реестр). Однако при входе на сервер идентификатор пользователя и пароль будут передаваться незашифрованными, поэтому любой, кто имеет доступ к проводу, сможет их увидеть. Делать защиту пароля бесполезной, так как он открывается с помощью FTP. Если вам нужен защищенный, вам нужно использовать безопасный FTP, что совсем другое дело (требуются сторонние библиотеки и сертификаты).
Решение Вопроса

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

string CompleteDPath = "ftp://www.example.com/wwwroot/videos/";

string FileName = "sample.mp4";

WebRequest reqObj = WebRequest.Create(CompleteDPath + FileName);

Следующий скрипт отлично подходит для загрузки файлов и видео на другой сервер через 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();
 06 февр. 2018 г., 05:52
как записать значение в тексте? не показывать: /
    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!!");
}

Вот решение !!!!!!

To Upload all the files from Local directory(ex:D:\Documents) to FTP url (ex: ftp:\{ip address}\{sub dir name})

public string UploadFile(string FileFromPath, string ToFTPURL, string SubDirectoryName, string FTPLoginID, string
FTPPassword)
    {
        try
        {
            string FtpUrl = string.Empty;
            FtpUrl = ToFTPURL + "/" + SubDirectoryName;    //Complete FTP Url path

            string[] files = Directory.GetFiles(FileFromPath, "*.*");    //To get each file name from FileFromPath

            foreach (string file in files)
            {
                FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(FtpUrl + "/" + Path.GetFileName(file));
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Credentials = new NetworkCredential(FTPLoginID, FTPPassword);
                request.UsePassive = true;
                request.UseBinary = true;
                request.KeepAlive = false;

                FileStream stream = File.OpenRead(FileFromPath + "\\" + Path.GetFileName(file));
                byte[] buffer = new byte[stream.Length];


                stream.Read(buffer, 0, buffer.Length);
                stream.Close();

                Stream reqStream = request.GetRequestStream();
                reqStream.Write(buffer, 0, buffer.Length);
                reqStream.Close();
            }
            return "Success";
        }
        catch(Exception ex)
        {
            return "ex";
        }

    }

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

Мой 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");

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

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

WebRequest.Create has this format:

ftp://ftp.example.com/remote/path/file.zip

There are easier ways to upload a file using .NET framework.

Easiest way

Самый простой способ загрузки файла на FTP-сервер с использованием .NET Framework - это использованиеWebClient.UploadFile method:

WebClient client = new WebClient();
client.Credentials = new NetworkCredential("username", "password");
client.UploadFile("ftp://ftp.example.com/remote/path/file.zip", @"C:\local\path\file.zip");
Advanced options

Если вам нужен больший контроль, тоWebClient не предлагает (например, шифрование TLS / SSL, режим ASCII, активный режим и т. д.), использоватьFtpWebRequest, как ты. Но вы можете сделать код более простым и эффективным, используяStream.CopyTo:

FtpWebRequest request =
    (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/remote/path/file.zip");
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Ftp.UploadFile;  

using (Stream fileStream = File.OpenRead(@"C:\local\path\file.zip"))
using (Stream ftpStream = request.GetRequestStream())
{
    fileStream.CopyTo(ftpStream);
}

Еще больше опций, включая мониторинг прогресса и загрузку всей папки, смотрите:
Загрузить файл на FTP с помощью C #

WebClient введите, чтобы сделать FTP-материал с гораздо более чистым кодом:

using (WebClient client = new WebClient())
{
    client.Credentials = new NetworkCredential(ftpUsername, ftpPassword);
    client.UploadFile("ftp://ftpserver.com/target.zip", "STOR", localFilePath);
}
 21 дек. 2016 г., 23:22
Самое лучшее и простое решение, которое я когда-либо читал !! Спасибо !!
 11 авг. 2017 г., 18:11
Как я могу использовать его в метод, принадлежащий классу формы? заранее спасибо

Ваш ответ на вопрос