DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Fonctions WLangage / Communication / Fonctions FTP
  • Gestion de la progression de transfert
  • Délai de transfert
  • Droits des utilisateurs
  • Chemin relatif et absolu
  • Serveur FTP de type AS/400
  • Permissions requises
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Transfère un fichier ou un répertoire d'un serveur FTP (File Transfer Protocol) sur le poste en cours.
WINDEVWEBDEV - Code ServeuriPhone/iPadWidget IOSMac Catalyst Remarque : Pour récupérer rapidement un seul fichier existant sur le serveur FTP, utilisez la fonction FTPRécupèreFichier.
WINDEVWEBDEV - Code ServeurEtats et RequêtesAndroidWidget AndroidJavaCode Utilisateur (MCU)Ajax
// Récupération du fichier "/Document/Fichier.txt" présent sur le serveur FTP 
// dans le répertoire "D:\Temp" sur le poste en cours 
ResRécupère = FTPRécupère(7, "/Document/Fichier.txt", "D:\Temp")
Syntaxe
<Résultat> = FTPRécupère(<Identifiant de la connexion> , <Fichier/Répertoire à récupérer> , <Fichier/Répertoire destination> [, <Procédure WLangage> [, <Mode de transfert>]])
<Résultat> : Booléen
  • Vrai si le transfert a été effectué,
  • Faux dans le cas contraire. Pour connaître le libellé de l'erreur, utilisez la fonction ErreurInfo avec la constante errMessage.
    Remarque : Le résultat peut être incorrect sur certains serveurs Unix : un fichier ou un répertoire existant peut ne pas être trouvé.
<Identifiant de la connexion> : Entier
Identifiant de la connexion, obtenu avec la fonction FTPConnecte.
PHP Ce paramètre est de type Variant.
<Fichier/Répertoire à récupérer> : Chaîne de caractères
Nom et chemin absolu (ou relatif) du fichier (ou du répertoire) à récupérer. Ce fichier (ou ce répertoire) est situé sur le serveur FTP. Les parties du chemin sont séparées par des "slash" (barre oblique normale, "/").
Attention : le nom du répertoire est case sensitive. Il faut utiliser la même casse que sur le serveur FTP (majuscules/minuscules).
Il n'est pas possible de donner de caractères joker (* ou ?). Pour récupérer plusieurs fichiers, utilisez préalablement la fonction FTPListeFichier pour avoir le nom des fichiers à récupérer.
Un chemin absolu est du type "</NomRépertoire>/<NomFichier>". L'arborescence obtenue est "/<NomRépertoire>/<NomFichier>".
Un chemin relatif est du type "<NomRépertoire>/<NomFichier>". L'arborescence obtenue est "/<RépertoireCourantServeur>/<NomRépertoire>/<NomFichier>".
Si ce paramètre correspond à un répertoire, tous les fichiers de ce répertoire sont récupérés. Un répertoire de même nom est créé sur le poste en cours à l'emplacement désigné par le paramètre <Fichier/Répertoire destination>.
Si ce paramètre correspond à un fichier :
  • si le paramètre <Fichier/Répertoire destination> est un répertoire existant sur le poste en cours, le fichier à récupérer est copié dans le répertoire destination.
  • si le paramètre <Fichier/Répertoire destination> est un fichier existant sur le poste en cours, le fichier à récupérer est copié et renommé.
<Fichier/Répertoire destination> : Chaîne de caractères
Nom et chemin complet (ou relatif) du fichier (ou du répertoire) destination. Un chemin de type UNC peut être utilisé.
<Procédure WLangage> : Nom de procédure
Nom d'une procédure WLangage appelée automatiquement pour contrôler la progression du transfert. Cette procédure peut être une méthode globale de classe (de la forme <Nom Classe>::<NomMéthodeGlobale>).
PHP Ce paramètre n'est pas disponible.
<Mode de transfert> : Constante optionnelle de type Entier
Mode de transfert réalisé :
ftpModeASCIITransfert réalisé en mode ASCII. Ce mode est utilisé pour un transfert entre deux systèmes d'exploitation différents, par exemple UNIX vers Windows : le fichier transféré est livré dans le format ASCII du système destinataire.
ftpModeBinaire
(Valeur par défaut)
Transfert réalisé en mode binaire. Le fichier est strictement identique entre l'envoi et la réception.
Remarques
WINDEVWEBDEV - Code ServeurEtats et RequêtesAndroidWidget AndroidJavaCode Utilisateur (MCU)Ajax

Gestion de la progression de transfert

La fonction FTPRécupère est une fonction bloquante : aucune autre action ne peut être effectuée jusqu'à la fin du transfert en cours.
Pour contrôler la progression du transfert, la fonction FTPRécupère peut appeler automatiquement une procédure WLangage <Procédure WLangage> à intervalles réguliers (tous les 64 Ko).
Cette procédure est déclarée de la manière suivante :
PROCEDURE <Nom de la procédure> (<Taille totale>, <Taille transférée>)
où :
  • <Taille totale> est un entier correspondant à la taille totale du fichier ou du répertoire en cours de transfert.
  • <Taille transférée> est un entier correspondant au nombre d'octets déjà transférés.
Il est possible dans cette procédure :
  • d'afficher une jauge de progression (via un champ Jauge par exemple),
  • de savoir si le transfert est terminé (<Taille totale>=<Taille transférée>).
La fonction FTPRécupère ne peut pas être interrompue tant qu'il reste des fichiers à transférer. Pour forcer l'interruption du parcours, il faut utiliser la ligne suivante dans la procédure <Nom de la procédure> :
RENVOYER Faux
Dans les autres cas (pour poursuivre le parcours), la procédure <Nom de la procédure> DOIT renvoyer Vrai.
Si la procédure <Nom de la procédure> ne retourne aucune valeur (ni Vrai, ni Faux), une erreur est générée.

Délai de transfert

Par défaut, toutes les fonctions FTP échouent si aucune réponse du serveur FTP n'est reçue après 20 secondes. Ce délai peut être modifié lors de la connexion au serveur FTP avec la fonction FTPConnecte.

Droits des utilisateurs

La récupération des fichiers présents sur un serveur FTP n'est possible que pour un utilisateur ayant les droits en lecture sur le serveur FTP. En règle générale, les utilisateurs "anonymes" ont les droits en lecture.

Chemin relatif et absolu

Les notions de chemin relatif et de chemin absolu sont très importantes dans une application FTP.
  • Un chemin commençant par un slash est considéré comme un chemin absolu : il s'agit du chemin par rapport à la racine du serveur FTP (paramètre propre au serveur).
    ex: /pub/user/JULIE
  • Si le chemin ne commence pas par un slash, il est considéré comme un chemin relatif, c'est-à-dire le chemin par rapport au répertoire en cours. Ce répertoire en cours peut être connu ou modifié avec la fonction FTPRepEnCours.
Lors de la connexion à un site FTP, le répertoire initial, le "home directory" de l'utilisateur n'est pas forcément la racine du serveur FTP. Il est donc conseillé d'utiliser des chemins relatifs.

Serveur FTP de type AS/400

La fonction FTPRécupère ne fonctionne pas correctement si le serveur FTP est présent sur un AS/400.
Dans ce cas, il convient d'utiliser la fonction FTPCommande avec la commande FTP "RETR" (pour plus de détails sur les fonctions FTP, consultez la documentation du serveur FTP utilisé).
AndroidWidget Android

Permissions requises

L'utilisation de cette fonction entraîne la modification des permissions requises par l'application.
Permission requise : INTERNET
Cette permission autorise l'application à ouvrir des sockets réseau.
Classification Métier / UI : Code métier
Composante : wd300com.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Attention, en 4G sur Android
Attention, sur Android, les fonctions FTP ne fonctionnent qu'avec un serveur sécurisé (SFTP://) lorsqu'on est connecté en 4G (en Wifi un serveur non sécurisé suffit)
Kevin
05 juil. 2021
Blocage
Je constate moi aussi un blocage lors de transferts "volumineux" (beaucoup de petits fichiers pour un total de 120 Mo). La procédure automatique n'est plus appelée et le timeout ne se déclenche pas. (Android 8)
Pierre-Yves
23 déc. 2019
L'application ne répond plus en utilisant FTP Récupère
J'utilise FTPRécupère pour récupérer une liste de fichiers par FTP et les traiter au fur et à mesure de leur arrivée. Une fois sur 3 en moyenne, l'application se fige et ne me rends pas la main. Je pensais pourtant qu'il y avait un timeout pour rendre la main même dans le cas d'une perte de connexion. Comment régler ce problème ?
De plus, le temps de téléchargement est très très long lorsqu'il y a beaucoup de fichiers sur le serveur distant : pour télécharger un fichier de 385octets, il faut environ 10 à 50 secondes pour la fonction Windev alors que Filezilla télécharge plusieurs fichiers de cette taille en 1 seconde. Il se peut que la fonction Windev liste tous les fichiers du dossier distant à chaque téléchargement de fichier !
phil
21 juin 2017

Dernière modification : 13/09/2024

Signaler une erreur ou faire une suggestion | Aide en ligne locale