it-swarm.com.de

Datei über FTP hochladen

Ich möchte eine Datei von einem Server auf einen anderen FTP-Server hochladen. Im Folgenden finden Sie meinen Code zum Hochladen der Datei. Es wird jedoch ein Fehler als 

Der Remote-Server hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z. B. Datei nicht gefunden, kein Zugriff).

Dies ist mein 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; 

Können Sie mir bitte sagen, wo ich falsch liege?

23
R.D.

Bitte stellen Sie sicher, dass Ihr FTP-Pfad wie folgt eingestellt ist.

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

string FileName = "sample.mp4";

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

Das folgende Skript funktioniert sehr gut mit mir, wenn Sie Dateien und Videos per FTP auf ein anderes Servier-System hochladen.

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();
37
irfanmcsd

Beispielcode zum Hochladen der Datei auf den FTP-Server

    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;
    }
13
Jayesh Sorathia

Sie können auch den übergeordneten Typ WebClient verwenden, um FTP-Dateien mit viel saubererem Code auszuführen:

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

Falls Sie immer noch Probleme haben, haben Sie das alles hinter mich gebracht ... Ich bekam die gleiche Fehlermeldung, obwohl ich die Datei in dem Verzeichnis, das ich hochladen wollte, perfekt sehen konnte, dh ich hat eine Datei überschrieben.

Meine FTP-URL sah folgendermaßen aus:

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

Daher verwenden meine Anmeldeinformationen den Benutzernamen und den PW des Testers.

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

Nun, mein FTP-Konto "Tester" ist auf " ftp://www.mywebsite.com/testingdir " gesetzt, aber wenn ich eigentlich FTP [von Explorer] sage, stelle ich gerade " ftp: // www .mywebsite.com "und melde mich mit meinen Tester - Zugangsdaten an und werde automatisch an" testingdir "gesendet.

Um diese Arbeit in C # zu ermöglichen, bin ich schließlich mit der URL - ftp://www.mywebsite.com/myData.xml .__ aufgestiegen. Vorausgesetzt, meine Testberater-Anmeldedaten und alles funktionierte einwandfrei. 

2
user1086279
  1. Stellen Sie sicher, dass Ihre URL, die Sie an WebRequest.Create übergeben, das folgende Format hat:

    ftp://ftp.example.com/remote/path/file.Zip
    
  2. Es gibt einfachere Möglichkeiten, eine Datei mit .NET Framework hochzuladen.

Einfachster Weg

Die einfachste Methode, eine Datei mit .NET Framework auf einen FTP-Server hochzuladen, ist die WebClient.UploadFile-Methode :

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");

Erweiterte Optionen

Wenn Sie eine umfassendere Kontrolle benötigen, die WebClient nicht bietet (wie TLS/SSL-Verschlüsselung, Modus ASCII, aktiver Modus usw.), verwenden Sie FtpWebRequest wie Sie. Sie können den Code jedoch einfacher und effizienter gestalten, indem Sie Stream.CopyTo verwenden:

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);
}

Für noch mehr Optionen, einschließlich Fortschrittsüberwachung und Hochladen des gesamten Ordners, siehe:
Datei mit C # auf FTP hochladen

1
Martin Prikryl

Hier ist die Lösung !!!!!!

So laden Sie alle Dateien aus dem lokalen Verzeichnis (z. B. D:\Documents) in die FTP-URL (z. B. ftp:\{ip-Adresse}\{Unterverzeichnisname})

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";
        }

    }
0
vignesh k