Visualizzazione dei risultati da 1 a 8 su 8

Discussione: FTP su TLS Implicito

  1. #1

    FTP su TLS Implicito

    Buongiorno,

    mi servirebbe tramite connessione FTP inviare alcuni file, il problema che la configurazione della casella è FTP su TLS implicito.

    Io ho cercato e alla fine ho scritto questo
    codice:
     private FTPClient connect(String host, String user, String pass, String cartella) {
            FTPClient ftp = null;
            try {
                System.out.println("\nAvvio Collegamento FTP");
                System.out.println("Host: " + host);
                Thread.currentThread().sleep(2000);
                // Crea nuova connessione
    
                TrustManager[] trustManager = new TrustManager[]{new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
    
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }};
                SSLContext sslContext = null;
                try {
                    sslContext = SSLContext.getInstance("TLS");
                    sslContext.init(null, trustManager, new SecureRandom());
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                } catch (KeyManagementException e) {
                    e.printStackTrace();
                }
                SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
                FTPClient client = new FTPClient();
                client.setSSLSocketFactory(sslSocketFactory);
                client.setSecurity(FTPClient.SECURITY_FTPS);
    
                client.connect(host);
    
                client.login(user, pass);
                client.setPassive(false);
                client.setType(client.TYPE_BINARY);
                System.out.println("Accedo alla cartella: " + cartella);
                client.changeDirectory("/" + cartella);
                System.out.println(client.currentDirectory());
                System.out.println("Connesso al server!");
    
            } catch (Exception e) {
                System.out.println("Impossibile connettersi al server!");
            }
            return ftp;
    
        }
    Si connette, ma quando effetuo l'upload fallisce e non riesco a capire il motivo
    codice:
    File file2 = new java.io.File(impostazioni.getPercorsoLetturaFile() + files[i]);
     client.upload(file2);
    Mi potreste aiutare?

    Ringrazio Anticipatamente.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Se fallisce è probabile che venga generata un'eccezione, ma se nel tuo codice scrivi

    codice:
    } catch (Exception e) {
       System.out.println("Impossibile connettersi al server!");
    }
    non scoprirai mai la causa. Le eccezioni non devono essere ammazzate. Sostituisci quel codice con questo:

    codice:
    } catch (Exception e) {
       e.printStackTrace();
    }
    verifica l'eccezione che viene visualizzata ed, eventualmente, posta qui tutto lo stackTrace.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    allora mi dice
    codice:
    java.lang.NullPointerException
    l'origine del file è corretta e onestamente anche la destinazione.

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da thunderBest
    allora mi dice
    codice:
    java.lang.NullPointerException
    l'origine del file è corretta e onestamente anche la destinazione.
    Questo non è lo stack-trace completo, ma un taglio (particolarmente grosso) di tutto lo stack-trace.

    Lo stack-trace ti dice non solo il nome dell'eccezione (che serve a capire cosa è successo), ma anche il nome del file dove si è verificata ed il numero di riga del file.

    Tutto quello che ti posso dire è che stai usando un oggetto nullo... dove? a che riga? è scritto nello stack-trace che hai tagliato.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    La riga in questione è quando effettuo l'upload del file.

    Stamani ho provato a cercare un'altra libreria e questa mi restituisce Permission denied, anche se sulla cartella di destinazione i privilegi sono 777, con filezilla riesco a copiare i file al suo interno. Un po strano.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Guardando per bene il tuo codice direi che non è affatto strano che ti dia una NullPointerException.

    Tu hai un metodo per la connessione e uno per l'upload (almeno, il codice che hai postato riguarda la connessione, quindi suppongo che tu ne abbia un secondo per l'upload). Ma in quello per la connessione fai questa roba qua

    codice:
    FTPClient client = new FTPClient();
    Ergo... crei un oggetto chiamato "client". Ma questo oggetto vive ed esiste solo all'interno di quel metodo. Una situazione classica vorrebbe che quell'oggetto "client" fosse dichiarato a livello di classe (quindi, non dentro al metodo) e poi "usato" dentro al metodo per la connessione. Secondo me, tu hai un oggetto di classe chiamato "client", ma non è inizializzato da nessuna parte, poichè dentro al metodo connect() tu ne crei uno nuovo, locale, che morirà e verrà spazzato via dal GC alla fine del metodo stesso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    No, perchè l'oggetto lo dichiaro nel costruttore. Ieri mi sono accorto solo stamani.
    A sua volta richiamo il metodo connet che restituisce l'oggetto FTPClient che utilizzo per effettuare upload.
    codice:
     
    private FTPClient connect(String host, String user, String pass, String cartella) {
            client = null;
            try {
                TrustManager[] trustManager = new TrustManager[]{new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
    
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            }};
                SSLContext sslContext = null;
                try {
                    sslContext = SSLContext.getInstance("TLS");
                    sslContext.init(null, trustManager, new SecureRandom());
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                } catch (KeyManagementException e) {
                    e.printStackTrace();
                }
                SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
                client = new FTPClient();
                client.setSSLSocketFactory(sslSocketFactory);
                client.setSecurity(client.SECURITY_FTPS);
    
                client.connect(host);
    
                client.login(user, pass);
                client.setPassive(false);
                client.setType(client.TYPE_BINARY);
                System.out.println("Accedo alla cartella: " + cartella);
                client.changeDirectory("/" + cartella);
                System.out.println(client.currentDirectory());
                System.out.println("Connesso al server!");
    
            } catch (Exception e) {
                System.out.println("Impossibile connettersi al server!");
            }
            return client;
        }
    Io sono abbastanza convinto che sia un blocco sulla casella ftp, ma il gestore dice di no, anche se facendo come mi hai detto te, l'errore è il seguente [code=550, message= /IN/FILE.TXT: Permission denied.]

    Grazie Mille per l'aiuto! nel messaggi precedenti mi sono dimenticato di ringraziare! :-)

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da thunderBest
    Io sono abbastanza convinto che sia un blocco sulla casella ftp, ma il gestore dice di no, anche se facendo come mi hai detto te, l'errore è il seguente [code=550, message= /IN/FILE.TXT: Permission denied.]
    Ok, quel messaggio è abbastanza eloquente. Solo alcuni controlli
    Verifica di essere all'interno della directory corretta nel server FTP
    Verifica che il file non venga trasferito con indicazione di "percorsi" in cui salvare
    Verifica che la directory "IN" esista nel server FTP, perchè il codice 550 ha un duplice significato:

    550 Permission Denied (or No such file or folder)

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.