Utilisation de readdir sous meteor


#1

Bonjour,
Je voudrais, sur un clic, du coté client donc, ramener un tableau contenant les noms des fichiers se trouvant dans /public/images/magasin
Pour cela j’ai pensé qu’il fallait utiliser la fonction readdir du module fs de node.js
Cette fonction semble n’être utilisable que coté serveur. ?
Je n’ai rien trouvé sur le net me permettant de sortir de cette impasse.
Connaissez-vous un tuto ou un exemple traitant de ce sujet?
J’ai besoin de votre aide.

Merci
YC


#2

je doute qu’on puisse acceder a la liste des fichiers d’un ordi a partir d’un browser, c’est completement insecure.


#3

Bonjour,

En effet, pour des raisons de sécurité, il est impossible de naviguer dans le système de fichier client depuis un navigateur. Le W3C a refuser d’implémenter la solution, mais a pensé à un moyen de gérer un système de fichiers cloisonné par domaine (je ne sais pas si c’est validé, refusé, en cours d’implémentation, etc.).

Le chemin est /public/images/magasin, ces fichiers sont sur la machine client ou sur le serveur ?
Dans le dernier cas, il faut que tu crées une API qui va réaliser la fonction (côté serveur donc).


#4

Oui c’est impossible via JS c’est et tant mieux, ça serait une grosse faille de sécurité autant que d’intrusion.
Sinon il faut écrire un ActiveX ou un applet Java comme le font les société de tirages photo en ligne.

Si l’arbo est côté serveur, tu peux parcourir son arbo: tu exposes une API pour commander le FS via le client.

Si c’est côté client alors ton client doit devenir son propre serveur, et pareil tu devrais exposer une API via nodejs (ou n’importe quel langage /framework server side)


#5

Bien sur, il y a un énorme mal entendu
Sans doute me suis-je mal exprimé, mais je parle bien de fichiers situés sur le serveur ! Hors de question d’aller explorer le disque dur de l’internaute !!!
Dans un projet METEOR,le répertoire /public qui contient par exemple des images auxquelles font référence des balises d’un template, est bien situé sur le serveur ???
C’est dans ce répertoire public que j’ai une arborescence /images/magasin , sur le serveur donc, qui contient des images.Si je veux les affichées, je renseigne la propriété src d’une balise img, et le tour est joué.
Mais moi ce que je veux, c’est la liste des noms de fichiers de ces images, donc le contenu du répertoire /public/images/magasin (situe sur le serveur)
Précédemment, j’avais une fonction PHP (donc exécutée sur le serveur) qui me faisait ça, et un appel AJAX sur cette fonction qui me retournait la liste de mes fichiers.
Mais comment réaliser ça avec METEOR ???
Comment fait-on, coté client meteor pour appeler une fonction coté serveur et récupérer de façon asynchrone je suppose basé sur un événement de réussite de ladite fonction.
Je n’arrive pas a trouver sur la toile, des informations qui traitent, sous meteor, d’un comportement de type AJAX sous PHP. Ça doit bien être possible ???

Merci de votre aide.
YC


#6


non ?


#7

Voila, ça roule …
1 définition d’une méthode qui s’exécute coté serveur et est accessible coté client

Meteor.methods({
dirFilesList:function§{
var files = fs.readdirSync(racine’+p);
return files;
}
});

2 Appel de cette méthode coté client

Meteor.call("dirFilesList","images/magasin/",function(err,res){
    if(err)
        .... Traitement de l'erreur
    else
        ... Traitement du tableau de noms de fichiers reçus dans res
});

J’aurais juste besoin d’une confirmation
Il semblerait que le dossier public soit “…/web.browser/app/”

Quelqu’un peut-il me confirmer que cela est vrai même en déploiement ?

Merci à tous ceux qui ont contribué a cette discussion.
YC