FTP, GetResponse (), erreur 550 fichier non disponible

j'ai créé une petite application Windows forms pour télécharger le fichier sur l'un des sites ftp de notre client. Mais le problème que je rencontre est que lorsque j'exécute cette application sur ma machine locale, il télécharge le fichier correctement. Mais si j'exécute ce programme sur notre serveur, j'obtiens ce message d'erreur;

serveur distant a retourné une erreur: (550) Fichier indisponible (par exemple, fichier non trouvé, ne peut pas accéder au fichier), sur cette ligne "objFTPRequest.GetRequestStream ();"

quelqu'un sait pourquoi? Dois-je configurer le pare-feu ou quelque chose? Voici mon 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();
20
demandé sur Irshad 2013-07-04 17:37:25

13 réponses

cette erreur peut être causée par plusieurs raisons comme le fichier n'est pas présent sur le serveur, les permissions de sécurité sur le fichier etc. etc.

vous devez d'Abord trouver la cause exacte de l'erreur. Ceci peut être réalisé en utilisant le code suivant-

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

une Fois que vous obtenez la cause exacte de l'erreur, vous pouvez aller de l'avant pour le résoudre.

Voici quelques liens que vous pouvez consultez

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-e-g-file-not-found-no-access/

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

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

29
répondu Microsoft DN 2013-07-04 14:14:18

Essayez ceci: ftp://xxx.xxx.xx.xx:21//path/filename

"/ / " après l'adresse du serveur commence à vous dans le répertoire racine. Même si j'ai eu:

0
répondu shankar 2017-01-11 16:27:35

moi aussi j'ai eu ce problème récemment. Ce que j'ai trouvé, c'est que lorsque j'utilise ftpUploadFile la routine est d'essayer de mettre le fichier dans le dossier FTP racine. La ligne de commande ftp a bien fonctionné. Toutefois, l'émission d'une commande pwd à partir de la ligne de commande ftp a révélé que ce serveur précis définissait un répertoire courant différent lors de la connexion. Modifier mon fichier ftpUploadFile pour inclure ce dossier a résolu le problème.

0
répondu user2709214 2017-02-01 13:54:37

assurez-vous que le dossier cible "outbox" existe. C'était mon problème avec l'erreur 550.

il suffit de créer le répertoire cible "output" avant de télécharger.

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
répondu Jan Macháček 2017-07-31 12:36:22

j'ai eu ce problème. Filezilla allait bien, mais pas net. C'était à un serveur wordpress. Pour le faire fonctionner, j'ai changé mon code:

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

à:

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

et il fonctionne maintenant heureusement.

Je ne sais pas si c'est spécifique aux dossiers FTP Wordpress.

0
répondu BingoCoder 2017-10-25 09:43:59

dans mon cas, il y avait un dossier racine référencé dans mon adresse ftp qui manquait. Après pour créer le dossier, le problème a été résolu.

ftp://xxx.xxx.xx.xx:21//rootfolder/

0
répondu Edu Pelais 2018-03-16 18:04:56

j'ai trouvé la solution. Le problème est le répertoire de travail courant de l'utilisateur ftp. Si vous tapez une url comme ftp:///path/test.txt it est utilisé comme un chemin relatif vers le répertoire de travail. Par exemple CWD est /test puis le chemin utilisé est /test/chemin/test.txt. Si vous voulez utiliser un chemin absolu, vous devez taper l'url comme ftp:////path/test.txt. Ensuite, le fichier est téléchargé dans le dossier /chemin/de test.txt, sans exception.

0
répondu sham 2018-10-01 07:16:12