Cherche une bibliothèque pour transmettre un array à un serveur FTP

Bonsoir,

je cherche une bibliothèque qui me permettrait de transmettre un array[] d'octets en temps que fichier sur un serveur FTP.
Les bibliothèques existantes attendent un fichier fini dans un systeme de fichiers local SPIFFS ou SD.

J'aimerais bien eviter cette étape gourmande en ressources et transmettre directement les données de mon array. Ca doit être faisable, mais demande un experience de FTP que je n'ai pas.

Qui connait une solution? Google ne m'a pas beaucoup aidé.

Salut
Pas FTP en tout cas. File Transfert Protocol. C'est écrit dessus, comme le Port Salut.

JSON ?

@+

Une librairie élaborée pour se connecter à une serveur FTP, sans doute pas mais une recherceh avec le mots clefs 'arduino ftp client' renvoie vers divers programmes contenant les fonctions nécessaires à une transaction avec un serveur FTP

hbachetti:
Salut
Pas FTP en tout cas. File Transfert Protocol. C'est écrit dessus, comme le Port Salut.

JSON ?

@+

Non, malheureusment: FTP fait partie du cahier des charges.
Il faut rester compatible avec des centaines de stations existantes...

Je sais que FTP est un File Transfert Protocol, mais a priori rien n'empêche de créer un fichier a la volée avec les données de l'array pendant la transmission FTP, non?

C'est un peu inefficace d'aller ecrire un fichier avec tout le ballast d'un système de fichiers juste pour le relire avant la transmission FTP, non?

al1fch:
Une librairie élaborée pour se connecter à une serveur FTP, sans doute pas mais une recherceh avec le mots clefs 'arduino ftp client' renvoie vers divers programmes contenant les fonctions nécessaires à une transaction avec un serveur FTP

J'ai bien quelques pistes, mais je ne sais pas où elles mênent.

J'ai bien quelques pistes, mais je ne sais pas où elles mênent

On passe souvent par ce stade les uns et les autres !!...et on explore ces pistes...

Je connais mal le FTP......peut etre une solution en mettant les données dans un petit fichier local et en l'envoyant en mode 'append' par FTP pour qu'il soit ajouté a un fichier distant

C'est un peu inefficace d'aller ecrire un fichier avec tout le ballast d'un système de fichiers juste pour le relire avant la transmission FTP, non?

Certainement, mais à moins qu'un illuminé se soit amusé à écrire une bibliothèque permettant de se passer de fichier, pas d'issue.
Techniquement cela reste parfaitement faisable.
Peut être en cherchant embedded ftp light client.

@+

Dans cet exemple vous avez cette partie de code:

byte clientBuf[64];
  int clientCount = 0;

  while(fh.available())
  {
    clientBuf[clientCount] = fh.read();
    clientCount++;

    if(clientCount > 63)
    {
      dclient.write(clientBuf,64);
      clientCount = 0;
    }
  }

  if(clientCount > 0) dclient.write(clientBuf,clientCount);

qui lit les données du fichier pour les envoyer par bloc de 64 octets. Bien sûr si les données sont en mémoire pas besoin de lire dans le fichier

FTP est une couche logicielle au dessus de TCP/IP.
Si tu ouvres une connexion TCP/IP vers le serveur FTP, tu peux très bien lui envoyer ce que tu veux en utilisant le "langage" FTP.
Voici un point d'entrée.

Le code de J-M-L me semble suffisamment simple pour être modifié facilement.
Je corrige le lien.

@+

hbachetti:
Je corrige le lien.

Ooops... merci, corrigé aussi dans mon post

le ftp, c'est juste un moyen d'echange dans un dossier sur un serveur...
comme dis plus haut File Transfert Protocol, un protocol d'echange de fichier en français...

Un array c'est quoi..? un fichier..? ben non...
c'est un tableau, il faut simplement le convertir en csv par exemple. et le transfert au dossier concerné sur le serveur.

Mais par quel moyen? wifi? ethernet?

la carte SD, elle permet juste de sauvegarder le fichier avant de l'envoyer sur le serveur.

Que ce soit WIFI ou Ethernet n'a rien à voir dans l'histoire. FTP est un protocole applicatif, pas une interface.
Le but est de faire du FTP sans passer par l'étape fichier.
Bricoler le code du lien de J-M-L me paraît faisable.

@+

hbachetti:
Que ce soit WIFI ou Ethernet n'a rien à voir dans l'histoire. FTP est un protocole applicatif, pas une interface.
Le but est de faire du FTP sans passer par l'étape fichier.
Bricoler le code du lien de J-M-L me paraît faisable.

@+

Oui je vais m'y mettre, je dois faire gaffe d'avoir un code atomique a chaque étape et ne pas dépasser environ 700mS d'execution, pour laisser du temps à la tâche d'acquisition chaque seconde de se faire.

Par contre envoyer des bouts de 64octets n'est plus nécessaire depuis le troisième millenaire!
En WiFi ça bousille complètement la bande passante.
Il faut au moins excéder le MTU du WiFi qui est en standard 1460 octets.

hazerty565:
le ftp, c'est juste un moyen d'echange dans un dossier sur un serveur...
comme dis plus haut File Transfert Protocol, un protocol d'echange de fichier en français...

Un array c'est quoi..? un fichier..? ben non...

Non pas d’accord - ce n’est pas tout à fait exact.

FTP, est un protocole de communication avant tout. Il y a des commandes dans le protocole qui permettent effectivement de travailler au niveau application (et donc de naviguer dans une arborescence, détruire ou renommer des fichiers) mais il y a aussi des commandes qui servent à envoyer un flux de données pour stocker cela dans un fichier distant (Par convention, deux ports sont attribués pour les connexions FTP : le port 21 pour les commandes et le port 20 pour les données); envoyer des données c’est simplement utiliser une commande de transfert et pousser des octets. ces octets peuvent être en mémoire ou sur disque ça n’a aucune importance au bout d’un compte ils sont sérialisés dans la communication tcp

Et oui on peut et doit pousser des buffers plus gros