web-dev-qa-db-fra.com

FtpClient storeFile renvoie toujours False

S'il vous plaît comprendre cela. Le code fonctionne correctement sans aucune exception.

        FTPClient ftp = new FTPClient();
        ftp.connect(server);
        if(!ftp.login(username, password))
        {
            ftp.logout();
            return false;
        }
        int reply = ftp.getReplyCode();
        if (!FTPReply.isPositiveCompletion(reply))
        {
            ftp.disconnect();
            return false;
        }
        InputStream in = new FileInputStream(localfile);
        ftp.setFileType(ftp.BINARY_FILE_TYPE, ftp.BINARY_FILE_TYPE);
        ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
        Store = ftp.storeFile(destinationfile, in);
        in.close();
        ftp.logout();
        ftp.disconnect();
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
        return false;
    }
    return Store;

Buttttttttt

l'instruction return renvoie toujours false et le fichier n'est pas téléchargé sur le serveur. Quelqu'un s'il vous plaît aider sur ce point.

Pour votre information, 1) Je suis dans un réseau de bureau. ---> avons-nous besoin d'ajouter des procurations?


          File file = new File("C:\\Users\\sg0214273\\Desktop\\seagate\\seagate.txt");
          FileInputStream input = new FileInputStream(file);
          client.setFileType(FTP.BINARY_FILE_TYPE);
          if (!client.storeFile(file.getName(), input)) {
            System.out.println("upload failed!");
          } 
          reply = client.getReplyCode();

            if(!FTPReply.isPositiveCompletion(reply)) {
                System.out.println("upload failed!");
            }



         Login success...
         230 User ******** logged in.
         upload failed!-----> is form boolean return value of storefile 
         upload failed!---------> is from replycode...
         Logout from FTP server...

S'il vous plaît aider

15
RaviKiran

Le message d'erreur exact peut être trouvé en appelant FtpClient # getReplyCode () . De cette page (mon emphase):

Immédiatement après la connexion est le seul temps réel, vous devez vérifier Le code de réponse (car connect est de type void). La convention pour Toutes les méthodes de commande FTP dans FTPClient est telle qu'elles renvoient une valeur booléenne ou une autre valeur. Les méthodes booléennes renvoient True en cas de réponse satisfaisante du serveur FTP et false en , Ce qui entraîne une erreur ou une défaillance. Les méthodes Renvoyant une valeur autre que booléenne renvoient une valeur contenant les données de niveau supérieur Générées par la commande FTP ou null si une réponse Entraînait une erreur ou un échec. Si vous souhaitez accéder au code de réponse FTP Exact causant un succès ou un échec, vous devez appeler GetReplyCode après un succès ou un échec.

Pour voir ce que signifie un code de retour, vous pouvez voir Wikipedia: liste des codes de retour du serveur FTP .

22
Matthew Farwell

Le sujet est assez ancien, mais je vais peut-être aider les autres. J'ai comparé ce que FileZilla envoie au serveur FTP et ce que mon programme a fait. J'avais besoin d'utiliser ftp.enterLocalPassiveMode () pour le faire fonctionner, ftp.pasv () pas bien :)

Et pour le débogage, il vaut mieux utiliser getReplyString () que seulement getReplyCode ()

5
jasiustasiu

Modifiez votre code pour passer en mode passif avant de transférer le fichier avec storeFile() comme suit:

...
ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();//Switch to passive mode
Store = ftp.storeFile(destinationfile, in);
in.close();
...

J'espère que cela pourra aider.

2
Babatunde Adeyemi

veuillez ajouter la bibliothèque Apache pour ce code Il s'agit de la classe impot

import org.Apache.commons.net.ftp.FTP;
import org.Apache.commons.net.ftp.FTPClient;
import org.Apache.commons.net.ftp.FTPFile;
import org.Apache.commons.net.ftp.FTPReply;

la classe d'importation rest est de Java.io ou Java.net

public boolean upload(String server,String username,String password,File localfile ){
        boolean Store=false;
        try{
        FTPClient ftp = new FTPClient();
               // ftp.connect(server);
    /* you can use either code which is written above above or below code as ftp port 20 is used for the data transfer and port 21 is used for command and controlls */
           ftp.connect(InetAddress.getByName(server),21); 
    //here 'server' is your domain name of ftp server or url
                if(!ftp.login(username, password))
                {
                    ftp.logout();
                    return false;
                }
          ftp.sendNoOp();//used so server timeout exception will not rise
                int reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    return false;
                }
              ftp.enterLocalPassiveMode(); /* just include this line here and your code will work fine */
                InputStream in = new FileInputStream(localfile);
              // ftp.setFileType(ftp.BINARY_FILE_TYPE, ftp.BINARY_FILE_TYPE);
               ftp.setFileType(FTP.BINARY_FILE_TYPE);
               // ftp.setFileTransferMode(ftp.BINARY_FILE_TYPE);
                Store = ftp.storeFile(destinationfile, in);
                in.close();
             //ftp.disconnect();
     //here logout will close the connection for you
                ftp.logout();

            }
            catch (Exception ex)
            {
                ex.printStackTrace();
                return false;
            }
        return Store;
    }
1
Naval Kishor Jha

Essayez d'utiliser ftp.enterLocalPassiveMode (); avant ftp.storeFile (destinationfile, in);

0
Thiago Pires