Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Créer un lecteur réseau SFTP sous Windows


Sujet :

WinDev

  1. #21
    Membre expérimenté
    Si c'est pour du transfert de fichiers entre utilisateur, regarde du côté des sockets. Il suffit de transmettre le fichier transformé en buffer auquel on aura accolé un CRC.
    Le serveur sera chargé du routage
    Il y a peut être plus simple, mais ça tourne

  2. #22
    Membre régulier
    Citation Envoyé par frenchsting Voir le message
    Bonjour,

    la question est toujours la même : que veux tu faire exactement ?

    Je me doute bien que tu veux faire du transfert de fichier(s) :
    - dans quel contexte (fréquence, automatique ou pas,...) ?
    - combien ?
    - dans quel sens?
    Bonjour frenchsting,

    Alors pour te répondre;
    -transfert unilatéral : uniquement déposer des fichiers (PDF) dans certains répertoires sur lesquels des traitements sont paramétrés et gérés par le serveur distants.
    -En terme de fréquence cela va dépendre des échéances du boulot et de la période. Parfois, je vais devoir déposer plus dizaines de fichiers dans la journée et parfois rien de va se passer durant plusieurs jours : enfin rien de journalier avec un volume important si c'est le fond de la question.
    -Il faut aussi prévoir l'envoi de fichiers (toujours PDF) assez lourds, plusieurs dizaines ou centaines de Mo.

  3. #23
    Expert éminent
    Je pense qu'il va "simplement" falloir faire un envoi avec les fonctions FTPxxx de Windev...

    Pour vérifier que la sécurité de ton serveur est compatible avec les fonctions de Windev, je te conseille de faire un petit dév hyper-basique (un bouton sur une fenêtre existante) qui va envoyer un fichier. En codant toutes les infos en dur dans ton code (serveur + port, user, mdp, chemin+nomfichier).

    Ensuite, tu feras ton "vrai" dév avec ta sélection de fichiers et la possibilité de lire les paramètres dans un fichier ini (par exemple).
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  4. #24
    Membre régulier
    Bonjour,

    Comme proposé par frenchsting, j'ai codé un petit soft qui se connecte à mon serveur (pour vérifier qu'il n'y a pas de soucis de sécurité ...) et rentrant toutes les informations en dur.
    Voici le code utilisé :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    nConnexion est un entier
     
    	nConnexion = FTPConnecte("sftp://url_serveur_distant", "utilisateur", "mot_de_passe",port)
     
    	SI FTPEnvoie(nConnexion, fRepExe() + "\1.PDF", "/C:/dossier") = Faux ALORS
    		Info("Echec du transfert",ErreurInfo)
    	FIN


    Pas de soucis rencontré. Le fichier "1.pdf" est bien envoyé sur le serveur !
    Du coup, j'ai tenté d'utiliser le même code pour un montage de lecteur réseau ... en rajoutant la lettre avant l'url du serveur mais en vain, cela ne fonctionne pas : message d'erreur.



    Maintenant, faut que j'essaye de poursuivre :
    - quel champ dois-je utiliser pour faire apparaître le contenu de mon dossier distant?
    - mettre en place le drag and drop dessus ce champ pour glisser mes fichiers à transférer
    - code pour lancer le transfert auto
    - faire en sorte que l'application se lance au démarrage de Windows

    Merci d'avance pour vos réponses.

  5. #25
    Expert éminent
    Bonjour,

    Pour lister les fichiers distants, tu as FTPListeFichier.

    - Tu sais récupérer une liste de fichiers (cf listes des fichiers pdf à funsionner) : ex : fic1, fic2,...ficn
    - Tu envoyer un fichier (vu dans cette discussion)
    - tu peux donc envoyer tes fichiers récupéré : n'oublie pas que tu ne transfères qu'un fichier à la fois (d'abord fic1, puis fic2, ..., puis ficn)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  6. #26
    Membre régulier
    Bonjour frenchsting,

    Merci pour le retour.
    Ce que j'aimerai faire (et surtout pour mes utilisateurs finaux) c'est afficher l'arborescence complète du dossier du serveur distant (un peu à la façon de FileZilla) :



    Car concrètement je n'ai pas d'intérêt de "lister" le contenu des dossiers distants car ceux-ci ne sont présents que pour faire du traitement de fichiers (=classement auto dans une GED) du coup en principe ils doivent être vides ^^
    Je cherche plus à reproduire une arborescence dans laquelle l'utilisateur n'aurait qu'à glisser/déposer son (ou ses) fichiers pour qu'il(s) soi(en)t traité(s).
    D'ailleurs est-il possible de transférer plusieurs fichiers à la fois et pas 1 après l'autre ?

  7. #27
    Expert éminent
    Quelque part, c'est mieux que tu ne puisses pas créer de lecteur réseau. Cela évite les âneries, du genre j'uploade un exe, une dll, ...des photos de vacances dans un répertoire géré par un automate qui va planter car il ne sais pas gérer ces fichiers.

    ftplistefichier() te liste les fichiers et les répertoires distants : A toi de gérer l'arborescence reçue pour l'afficher dans un arbre...

    Non, on ne peut pas faire d'envois simultanés genre ftpenvoie(idcnx, fic1, fic2, ..., ficn). Je n'en vois pas l'intérêt...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  8. #28
    Membre régulier
    J'ai fais pas mal de recherches dans l'après-midi et je dois avouer que j'ai rien trouvé de bien concluant.
    L'aide de la fonction "ftplistefichier()" permet juste de renvoyer un nombre de fichiers présent sur le serveur distant ... pas vraiment d'intérêt pour moi ^^ lol

    Du coup, j'ai cru comprendre qu'il faudrait peut être que j'alimente une table ou fichier de données en listant le contenu du serveur distant et qu'ensuite j'alimente mon champ arbre par exemple depuis cette table ou fichier de données? Suis-je sur la bonne voie?
    Cela me semble bien compliqué ...
    Il doit y avoir plus simple non ?

    Merci d'avance pour les retours.

  9. #29
    Membre expérimenté
    https://doc.pcsoft.fr/fr-FR/?1000003...chier_fonction

    Permet d'avoir la liste des fichiers (pas seulement le nombre).

  10. #30
    Membre expérimenté
    Citation Envoyé par samsam007 Voir le message
    il faudrait peut être que j'alimente une table ou fichier de données en listant le contenu du serveur distant
    Une variable tableau suffit. Cette variable sera alimentée via la fonction appelée.
    Ou alors t'inspirer de l'exemple unitaire
    Cela me semble bien compliqué
    C'est toi qui te complique la vie là. Depuis le départ d'ailleurs. A moins que ce ne soit dans le cahier des charges imposé ...
    Il y a peut être plus simple, mais ça tourne

  11. #31
    Membre régulier
    Je suis preneur si il y a plus simple.🤔
    Mais vu que le montage via lecteur réseau n a pas l air de fonctionner .... j essaye de trouver une alternative au problème.
    Je cherche juste un moyen simple de televerser des PDF sur le serveur sftp!!
    Un peu à la façon de mountain duck ( ou autre du même genre) via un simple glisser/déposer

  12. #32
    Membre éprouvé
    Bonsoir
    Vous avez essayé l'exemple WD Transfert de fichiers par FTP ?

  13. #33
    Membre régulier
    Bonsoir,

    Oui oui j ai essayé de regarder et adapter l exemple pour mon cas.... mais un peu trop complexe pour moi 🙁

  14. #34
    Membre régulier
    Bonjour,

    Après plusieurs essais sans résultat, j'ai décidé de chercher une alternative pour résoudre mon besoin de mettre en place un genre de lecteur réseau connecté en sFTP.
    Je suis tombé sur la fonction "fSurveilleRépertoire()" qui m'a donné un nouvel angle d'attaque à ma problématique.
    Il fallait aussi que je trouve comment envoyer plusieurs fichiers en même temps et suite à des recherches je suis tombé sur le code suivant (qui appartient à frenchsting, que je remercie dans la foulée, trouvé dans le fil de discussion suivant : https://www.developpez.net/forums/d1...u-dossier-ftp/) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UnFichier, ResListeFichier sont des chaînes
    ResListeFichier = fListeFichier("S:\Tranfert\Dossier_A\*.*", frNonRécursif)
    // Pour chaque fichier trouvé
    POUR TOUTE CHAÎNE UnFichier DE ResListeFichier SEPAREE PAR RC
       FTPEnvoie(PGlobales.gnIDConnexionFTP, UnFichier, "/Contenu/Dossier_B")
    FIN


    Après adaptation pour mes besoins, je suis arrivé au code suivant :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    nConnexion est un entier
    UnFichier, ResListeFichier	sont des chaînes
     
    nConnexion = FTPConnecte("url_serveur", "utilisateur", "mot_de_passe",N°port)
     
    ResListeFichier = fListeFichier("C:\Transfert\*.pdf*", frNonRécursif)
     
    POUR TOUTE CHAÎNE UnFichier DE ResListeFichier SÉPARÉE PAR RC
    	FTPEnvoie(nConnexion, UnFichier, "chemin_sur_serveur_distant")
    	fSupprime(UnFichier,frVersCorbeille)
    FIN
    FTPDéconnecte(nConnexion)


    J'ai mis celui ci dans une procédure globale que j'appelle via le code suivant (placé dans le code de fin initialisation de ma fenêtre) :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // Nom du répertoire à surveiller
    sNomRepertoire est une chaîne = "C:\Transfert"
    // La procédure TraiteModificationRep sera appelée
    // lorsqu'un fichier ou un répertoire contenu dans le répertoire "C:\Transfert" sera modifié.  
    fSurveilleRépertoire(sNomRepertoire,envoi_fichier_SFTP, fsCréationFichier + fsModificationFichier + fsSuppressionFichier + fsRenommage)


    J'ai ensuite généré mon .exe que je lance au démarrage de ma session Windows via une tâche planifiée.
    Tout fonctionne,cependant, j'ai quelques interrogations ? :

    - mon code est-il "clean" ? et placé au bon endroit?
    - je vais devoir faire la même procédure avec 2 dossiers en plus; comment faire en sorte que le code soit optimale? Me suffit-il de copier/coller cette procédure ou il est possible de mettre l'ensemble de manière plus performante?
    - appelé le .exe avec une tache planifiée est une bonne idée?

    Je vous remercie pour les différents retours et je suis preneur de toute amélioration ^^

  15. #35
    Expert éminent
    Hello SamSam,

    J'avais un peu décroché de ton histoire, mais me je passe te faire un coucou.

    Pour ton deuxième répertoire, si ton traitement est identique, tu peux faire :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // Nom du répertoire à surveiller
    sNomRepertoire est une chaîne = "C:\Transfert"
    sNomRepertoire2 est une chaîne = "C:\Transfert2"
    // La procédure TraiteModificationRep sera appelée
    // lorsqu'un fichier ou un répertoire contenu dans le répertoire "C:\Transfert" sera modifié.  
    fSurveilleRépertoire(sNomRepertoire,envoi_fichier_SFTP, fsCréationFichier + fsModificationFichier + fsSuppressionFichier + fsRenommage)
    fSurveilleRépertoire(sNomRepertoire2,envoi_fichier_SFTP, fsCréationFichier + fsModificationFichier + fsSuppressionFichier + fsRenommage)

    Mais je pense que tu dois mettre tes fichiers du répertoire 2 dans un autre répertoire sur ton serveur.

    Une idée : Tu testes le nom du répertoire dans ta procédure (si c'est égal à snomrepertoire ou à snomrepertoire2)
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  16. #36
    Membre régulier
    Hello frenchsting,

    Merci pour le retour. Oui en effet, mon projet était un peu tombé aux oubliettes ^^
    Puis au vu des derniers évènements, je me suis dis que chacun devait avoir d'autres choses sur le feu !!
    D'ailleurs, j'espère que tout va bien? Que la situation est gérable ?
    En effet, les fichiers du répertoire2 doivent être envoyés dans un autre répertoire du serveur.
    Du coup, je dois passer par un "selon - cas1 - cas 2" dans ma procédure si j'ai bien compris?

  17. #37
    Expert éminent
    Hello Samsam,

    Ca va. Je bosse en télétravail. Et Toi ?

    Oui, il faudra que tu passes par une variable globale pour savoir sur quel répertoire tu dois travailler.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.

  18. #38
    Membre régulier
    Hello frenchsting,

    Ça va également pour moi ^^ Tant mieux si de ton côté aussi tout va bien
    Télétravail pour moi également et je m'occupe de le mettre en place pour l'ensemble des autres personnes ... c'est pas toujours gagné ^^ lol
    Je te remercie pour le retour.
    Je clôture la discussion.
    Encore merci à tous pour votre aide et vos réponses.
    A bientôt pour d'autres problématiques !!

    Bonne soirée à tous et prenez soin de vous et de vos proches.

  19. #39
    Expert éminent
    Super si ça va.

    Prends soin de toi et de tes proches également.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Make it real not fantasy.