it-swarm.com.de

FTP, GetResponse (), Fehler 550 Datei nicht verfügbar

Ich habe eine kleine Windows-Formularanwendung erstellt, um die Datei auf eine FTP-Site unseres Kunden hochzuladen. Aber das Problem, das ich habe, ist, dass wenn ich diese Anwendung auf meinem lokalen Rechner starte, die Datei erfolgreich hochgeladen wird. Wenn ich dieses Programm auf unserem Server starte, erhalte ich diese Fehlermeldung.

remote-Server hat einen Fehler zurückgegeben: (550) Datei nicht verfügbar (z. B. Datei nicht gefunden, kann nicht auf die Datei zugreifen), in dieser Zeile 'objFTPRequest.GetRequestStream ();'.

Weiß jemand warum? Muss ich die Firewall oder etwas konfigurieren? Hier ist mein Code;

FileInfo objFile = new FileInfo(filename);
FtpWebRequest objFTPRequest;

// Create FtpWebRequest object 
objFTPRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/outbox/" + 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();


// 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();
21
chosenOne Thabs

Dieser Fehler kann aus verschiedenen Gründen verursacht werden, z. B. weil eine Datei auf dem Server nicht vorhanden ist, Sicherheitsberechtigungen für eine Datei usw. usw.

Zuerst müssen Sie die genaue Fehlerursache ermitteln. Dies kann durch die Verwendung des folgenden Codes erreicht werden:

try
{
        //Your code
}
catch(WebException e)
{
        String status = ((FtpWebResponse)e.Response).StatusDescription;
}

Wenn Sie die genaue Fehlerursache ermittelt haben, können Sie den Fehler beheben. 

Hier sind einige Links, auf die Sie verweisen können

http://forums.asp.net/t/1777881.aspx/1

http://nickstips.wordpress.com/2010/10/25/c-ftp-upload-error-the-remote-server-returned-an-error-550-file-unavailable-eg-file-not- Kein Zugriff gefunden/

http://www.dreamincode.net/forums/topic/76361-file-upload-to-server/

http://forums.asp.net/t/1374306.aspx/1

30
Microsoft DN

Versuchen Sie Folgendes: ftp: //xxx.xxx.xx.xx: 21 // Pfad/Dateiname

Das "//" nach der Serveradresse startet Sie im Stammverzeichnis. Obwohl ich Folgendes hatte: ftp: //xxx.xxx.xx.xx: 21/Pfad/Dateiname , habe ich nicht zum richtigen Verzeichnis geführt.

17
Bremaria

Ich bin auf das gleiche Problem gestoßen und habe es auch getan:

  1. Prüfen Sie, ob das Betriebssystem schreibberechtigt ist. Suchen Sie den Ordner ftp => right Click => properties => security. Dann müssen Sie wissen, was Sie tun sollen
  2. Überprüfen Sie, ob der FTP-Server das Schreibrecht für den von Ihnen angemeldeten Benutzer öffnet. Öffnen Sie IIS => klicken Sie auf die FTP-Site => FTP-Berechtigungsregeln => Zulassungsregeln hinzufügen => Wählen Sie einen Benutzer oder eine Gruppe aus, um die Rechte festzulegen
  3. Überprüfen Sie das Verzeichnis auf dem FTP-Server und verfahren Sie wie in Punkt 2.

Ich kann vier Bilder verwenden, um die einzustellenden Rechte anzuzeigen: enter image description here

enter image description hereenter image description hereenter image description here

7
francis

Es könnte einfacher sein.

Ich habe mit einem ähnlichen Problem zu tun und habe alle vorgeschlagenen Lösungen ausprobiert, aber niemand arbeitet ... Ich bin auf einfache Art und Weise wie diese herausgekommen: Schauen Sie sich das an 

Falscher Code an meinem Ende 

 Dim request As Net.FtpWebRequest = CType(FtpWebRequest.Create("ftp://xxx.xxx.xxx.xxx/files"), FtpWebRequest)

Ändern Sie es in diesem einfachen:

 Dim request As Net.FtpWebRequest = CType(FtpWebRequest.Create("ftp://xxx.xxx.xxx.xxx/files/youfilename.ext"), FtpWebRequest)

dann mit Anfrage füllen und an Server senden :)

Das ist alles.

Stellen Sie sicher, dass alle Berechtigungen auf dem Server ordnungsgemäß funktionieren und dass Sie die richtigen Anmeldeinformationen verwenden.

4
makemoney2010

Als ich das gleiche Problem hatte, versuchte ich alles oben und nach einem Tag erkannte ich, dass der Pfad, den ich für uri erstellt hatte, ein Leerzeichen zwischen "/" und dem Ordnernamen hat 

string uri="192.168.1.101/ Sync/Image.jpg";

die obige Zeichenfolge sollte sein

string uri="192.168.1.101/Sync/Image.jpg";

dieser kleine Fehler wirft auch den gleichen Fehler ab und ist ein gültiger Fehler, da dies kein gültiger Pfad für unsere Datei ist, wenn zwischen "/" und dem Ordner/Dateinamen Leerzeichen enthalten sind

1

Ich hatte auch dieses Problem vor kurzem. Was ich gefunden habe, ist, dass wenn ich ftpUploadFile verwende, die Routine versucht, die Datei in den FTP-Stammordner zu legen. Die normale Befehlszeile ftp funktionierte einwandfrei. Die Ausgabe eines Befehls pwd über die Befehlszeile ftp ergab jedoch, dass dieser Server bei der Anmeldung ein anderes aktuelles Verzeichnis einrichtete. Durch das Ändern meiner ftpUploadFile-Datei in diesen Ordner wurde das Problem behoben. 

1
user2709214

Um dieses Problem zu beheben, ist es erforderlich, den Befehl System.Net.FtpWebRequest zu erzwingen, das alte Verhalten der .Net Framework 2.0/3.5 wiederherzustellen und den zusätzlichen CWD-Befehl auszuführen, bevor der eigentliche Befehl ausgegeben wird .

Dazu muss der folgende Code eingefügt werden, bevor eine Instanz der System.Net.FtpWebRequest-Klasse aufgerufen wird. Der Code muss nur einmal aufgerufen werden, da er die Einstellungen der gesamten Anwendungsdomäne ändert.

private static void SetMethodRequiresCWD()
{
        Type requestType = typeof(FtpWebRequest);
        FieldInfo methodInfoField = requestType.GetField("m_MethodInfo", BindingFlags.NonPublic | BindingFlags.Instance);
        Type methodInfoType = methodInfoField.FieldType;


        FieldInfo knownMethodsField = methodInfoType.GetField("KnownMethodInfo", BindingFlags.Static | BindingFlags.NonPublic);
        Array knownMethodsArray = (Array)knownMethodsField.GetValue(null);

        FieldInfo flagsField = methodInfoType.GetField("Flags", BindingFlags.NonPublic | BindingFlags.Instance);

        int MustChangeWorkingDirectoryToPath = 0x100;
        foreach (object knownMethod in knownMethodsArray)
        {
            int flags = (int)flagsField.GetValue(knownMethod);
            flags |= MustChangeWorkingDirectoryToPath;
            flagsField.SetValue(knownMethod, flags);
        }
 }

http://support.Microsoft.com/kb/2134299

1
Taras Kravets

Stellen Sie sicher, dass der Zielordner "Postausgang" vorhanden ist . Dies war mein Problem mit dem Fehler 550.

Legen Sie vor dem Hochladen einfach das Zielverzeichnis "Ausgabe" an.

try
        {
            WebRequest request = WebRequest.Create("ftp://" + ftpServerIP + "/outbox");
            request.Credentials = new NetworkCredential("user", "password");
            request.Method = WebRequestMethods.Ftp.MakeDirectory;
            using (var resp = (FtpWebResponse)request.GetResponse())
            {
                Console.WriteLine(resp.StatusCode);
            }
        }
        catch (WebException ex)
        {
            FtpWebResponse response = (FtpWebResponse)ex.Response;
            if (response.StatusCode == FtpStatusCode.ActionNotTakenFileUnavailable)
            {
                response.Close();
                //already exists
            }
            else
            {
                response.Close();
                //doesn't exists = it's another exception
            }
        }
0
Jan Macháček

Ich hatte das gleiche Problem, als ich mit ftpuri und User Name Path verglichen wurde, ist es gelöst Wenn ich FTP-Zugriff erstelle, habe ich den Pfad als/Verzeichnisname gewählt

wenn im ftpuri der Verzeichnisname angegeben wurde, wurde der Fehler ausgegeben, und wenn der Verzeichnisname entfernt wurde, wird er aufgelöst.

ftpuri mit fehler 

" ftp://www.example.com/Project/IhrDateiname.ds "

ftpuri gelöst

" ftp://www.example.com/ihrfilename.ds "

fTP-Zugriffsordner "/ Project"

0
shankar

Nur um meinen Hut in den Ring zu werfen, bekam ich den gleichen Fehler. Wenn der FTP-Request Dateien vom FTP-Dienst auf demselben Computer (dieselbe IP-Adresse) anforderte. In der Anfrage habe ich die IP-Adresse des Rechners verwendet, aber als ich das auf 127.0.0.1 geändert hatte, funktionierte es. Interessanterweise wurden Anfragen von anderen IP-Adressen verarbeitet und Dateien heruntergeladen, nur nicht von sich selbst. 

Hoffe das hat jemandem geholfen.

0
dellyjm

In meinem Fall gab es einen Stammordner, auf den in meiner FTP-Adresse verwiesen wurde. Nach dem Erstellen des Ordners wurde das Problem behoben.

ftp: //xxx.xxx.xx.xx: 21 // Stammordner/

0
Edu Pelais

Ich hatte dieses Problem. Filezilla ging es gut, .net nicht. Es ging um einen Wordpress-Server ... Um es funktionieren zu lassen, habe ich meinen Code folgendermaßen geändert:

ftp://XXX.XXX.XXX.XXX//folder// "+ txtFile.Text

zu:

ftp: // [FTPNAME] @ XXX.XXX.XXX.XXX // "+ txtFile.Text

und es funktioniert jetzt dankbar.

Ich weiß nicht, ob dies spezifisch für Wordpress-FTP-Ordner ist.

0
BingoCoder

Ich habe die Lösung gefunden. Das Problem ist das aktuelle Arbeitsverzeichnis des FTP-Benutzers. Wenn Sie eine URL wie ftp: ///path/test.txt eingeben, wird diese als relativer Pfad zum Arbeitsverzeichnis verwendet. Zum Beispiel ist CWD/test und der verwendete Pfad ist /test/path/test.txt. Wenn Sie einen absoluten Pfad verwenden möchten, müssen Sie die URL wie folgt eingeben: ftp: ////path/test.txt. Dann wird die Datei ausnahmslos in den Ordner /path/test.txt hochgeladen.

0
sham