Se connecter / S'enregistrer
Votre question

Transfaire de fichier ( serveur a serveur ) NodeJS

Tags :
  • Jquery
  • Web
  • TCP IP
  • socket.io-client
  • nodejs
  • Jade
  • Javascript
  • socket.io
  • wrench
  • Express pc
  • transfaire
Dernière réponse : dans Programmation
1 Septembre 2013 02:28:51

Bonjours a tous.
Je n'est pas réellement de problème.
A vraie dire la première version ma solution marche ( enfin presque ), mais je compte la reprendre depuis le début afin d'avoir un truc super méga encor plus mieux ^^ ...

Le pourquoi du comment :
Actuellement je télécharge ( légalement hein :D  ) avec a l'aide d'un client torrent installer sur un serveur dédier chez ovh ( que je vais appeler "Dedier" )
Chez moi j'ai un vieux pc qui tourne ( appeler "multimédia" ) et réalise quelque tache pas très importante, et une PS3 ...

J'ai donc installer PS3 Media Serveur sur mon serveur multimédia ... sa marche bien c'est génial ...

Mais reste un gros problème a mon installation... a chaque fois que je veux rapatrier un fims/documentaire/series depuis mon dedier vers mon serveur multimédia je doit me taper une connexion ssh et une commande scp longue comme ma bite .
cela n'est pas très user friendly...

Ma première approche a était un transfère de fichier par sftp a l'aide php.

10 ligne de code plus tard je me retrouve donc avec une jolie page blanche entrain de charger... le transfère prend whatmille ans et niveau expérience utilisateur, je pense que l'on tombe dans le négatif ...

Et là la folie ma pris, pourquoi pas faire du NodeJS ^^

Donc solution, fonctionne avec deux script (un sur chaque serveur).
et les premier teste on montrer un débit de l'ordre de 9mo/s ( sur une connexion 100mb/s).
je vais donc garder cette solution et vous présenter sont évolution.

Mais pour sont amélioration je vais avoir besoin de votre expérience et de vos idée.

La base.
je liste les fichier présent dans le dossier Downloads a l'aide du module wrench
qui me ressort une liste de path
puis je crée un arbre d'objet :

  1. function convertToHierarchy(arry)
  2. {
  3. var item, path;
  4. var children = {};
  5. var hasParent = {};
  6. for (var i = 0; i < arry.length; i++)
  7. {
  8. var path = arry[i];
  9. var parent = null;
  10. for (var j = 0; j < path.length; j++)
  11. {
  12. var item = path[j];
  13. if (!children[item]) {
  14. children[item] = {};
  15. }
  16. if (parent) {
  17. children[parent][item] = true;
  18. hasParent[item] = true;
  19. }
  20. parent = item;
  21. }
  22. }
  23.  
  24. var result = [];
  25. for (item in children) {
  26. if (!hasParent[item]) {
  27. result.push(buildNodeRecursive(item, children));
  28. }
  29. }
  30. return result;
  31. }
  32.  
  33. function buildNodeRecursive(item, children)
  34. {
  35. var node = {id:item, children:[]};
  36. for (var child in children[item]) {
  37. node.children.push(buildNodeRecursive(child, children));
  38. }
  39. return node;
  40. }
  41.  
  42. exports.index = function(req, res){
  43. var directory = "/home/Downloads/";
  44. var files = [];
  45. var filestemp = wrench.readdirSyncRecursive(directory);
  46. [code="javascript"]
  47. filestemp.forEach(function(file){
  48. if(!fs.statSync(directory+file).isDirectory()){
  49. var part = file.split('/');
  50. files.push(part);
  51. }
  52. });
  53.  
  54. files = convertToHierarchy(files);
  55. res.render('index', { title: 'NoTransMulEnvoi' , files: files });
  56. };


Ensuite j'envoi tous sa dans mon jade et je cree un bon gros arbre a base de ul li

_file_list.jade :
  1. mixin file_list(files, path)
  2. ul
  3. each file, i in files
  4. - var filePath = path;
  5. li
  6. - if(file.children.length > 0){
  7. span #{file.id}
  8. - filePath += file.id + '^';
  9. mixin file_list(file.children, filePath)
  10. - }else{
  11. span
  12. a(href='#{filePath}#{file.id}') #{file.id}
  13. - }

index.jade:
  1. include _file_list
  2. doctype 5
  3. html
  4. head
  5. title= title
  6. link(rel='stylesheet', href='/stylesheets/style.css')
  7. link(rel='stylesheet', href='/themes/default/easyui.css')
  8. link(rel='stylesheet', href='/themes/icon.css')
  9. script(src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
  10. script(src='/javascripts/index.js')
  11. script(src='/javascripts/jquery.easyui.min.js')
  12. body
  13. h1= title
  14. p Welcome to #{title}
  15. button#collapseAll collapseAll
  16. ul.easyui-tree#tt
  17. li Download !
  18. mixin file_list(files, '')

a l'aide de jquery easyui je applique une dose supplémentaire de JavaScript pour avoir un rendu plutot sympas : tree display (comme ça.

Jusque la tous marche... mais le problème c'est que l'on arrive vite avec un gros arbre... et easyUI vien faire freezer le navigateur ...
Je ne peut donc pas garder ce système ...

Des idée dans la présentation de tous les fichier du dossier download ?




PS : overdose de javascript en cours !!!

Autres pages sur : transfaire fichier serveur serveur nodejs

2 Septembre 2013 17:52:58

Bon finalement les fichier ne seront plus lister sur la page index, la page index sera réserver a l'affichage des transfère en cours et quelque info sur l'espace disque disponible des deux serveur ect ...

ainsi la page de listage ce situe maintenant sur /listdedier (il est prévue dans un lointain futur si la motivation reste au rendez-vous d'avoir un /listmultimedia afin de pouvoir renommer/supprimer les fichier présent sur ce serveur ... ).

Le jade a était modifier :
_list.jade :
  1. mixin file_list(files, path)
  2. ul
  3. each file, i in files
  4. - var filePath = path;
  5. - if(file.children.length > 0){
  6. li.treenode #{file.id}
  7. - filePath += file.id + '^';
  8. mixin file_list(file.children, filePath)
  9. - }else{
  10. li
  11. a(href='#{filePath}#{file.id}') #{file.id}
  12. - }

et list.jade
  1. include _list
  2. doctype 5
  3. html
  4. head
  5. title= title
  6. link(rel='stylesheet', href='/stylesheets/style.css')
  7. link(rel='stylesheet', href='/stylesheets/list.css')
  8. script(src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js')
  9. script(src='/javascripts/list.js')
  10. body
  11. h1= title
  12. p Welcome to #{title}
  13. div.tree Download
  14. mixin file_list(files, '')


list.js
  1. $(document).ready(function() {
  2.  
  3. //--- abonnement event ---
  4. $('li.treenode').click(function(self){
  5. self.stopPropagation();
  6. if($(this).children("ul").is(":visible")){
  7. $(this).children("ul").hide("slow");
  8. }
  9. else{
  10. $(this).children("ul").show("slow");
  11. }
  12. });
  13.  
  14. //--- action chargement page ---
  15. $('ul:not(:first)').hide();
  16.  
  17. });


certe c'est un peut moins beau , mais sa ne freeze pas ^^

Objectif de la soirer : apprendre a utiliser socket.io proprement avec Express afin d'avoir mon code dans ma route et non dans mon app.js ...
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS