Advertisement
desdemona

srv2

Dec 19th, 2014
646
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var http = require('http');
  2. var fs = require('fs');
  3. var path = require('path');
  4. var async = require('async');
  5. var archiver = require('archiver');
  6.  
  7. const FileDirectory = "./";
  8.  
  9. var port = process.argv[2] || 8888;
  10. var dirs = {};
  11. dirs = [".//png//", ".//jpg//", ".//html//", ".//js//", ".//gif//"];
  12. exts = [".png", ".jpg", ".html", ".js", ".gif"];
  13.  
  14. var getFilesFromDir = function(myDir, zipArchiver, myCallback) {
  15.     var results = [];
  16.     fs.readdir(myDir, function processContent(error, files) { //czytacz asynchroniczny
  17.         if (error) {
  18.             console.log(error);
  19.             return myCallback(error);
  20.         }
  21.         else {
  22.             var filesLeft = files.length;
  23.             console.log('Found files: ' + filesLeft + ' ' + myDir);
  24.             if(!filesLeft) { //directory is empty
  25.                 console.log('Dir is empty ' + myDir);
  26.                 return myCallback(null, results);
  27.             }
  28.             for(file in files)
  29.             {
  30.                 file = path.join(myDir,files[file]);
  31.                 if(fs.statSync(file).isDirectory())
  32.                 {
  33.                     console.log('Entering directory ' + file);
  34.                     getFilesFromDir(file, zipArchiver, function subdirectoryDone(error, internalResult) {
  35.                         console.log("callback hell" + file + ' files left: ' + (filesLeft-1));
  36.                         if (!--filesLeft) {
  37.                             console.log('Last dir in ' + file);
  38.                             return myCallback(null,"last file callback");
  39.  
  40.                         }
  41.                     });
  42.                 }
  43.                 else { //normal file
  44.                     var fileName = path.basename(file);
  45.                     console.log(fileName);
  46.                     zipArchiver.append(fs.createReadStream(file), {name: fileName});
  47.                     console.log("File: " + file + ' items left: ' + (filesLeft-1));
  48.                     if (!--filesLeft) {
  49.                         console.log('Last file:' + file);
  50.                         return myCallback(null,"last file callback");
  51.                     }
  52.                 }
  53.             }
  54.         }
  55.     });
  56.  
  57. };
  58.  
  59. var myServer = http.createServer(function (req, res) {
  60.     console.log('request starting:' + req.method + " " + req.url);
  61.     var dirName = path.dirname(req.url).toLowerCase();
  62.     var baseName = path.basename(req.url).toLowerCase();
  63.     var extName = path.extname(req.url).toLowerCase();
  64.     console.log(dirName + " " + baseName + " " + extName);
  65.  
  66.  
  67.     if (req.method.toLowerCase() === 'get' && (extName === '.html' || extName === '.js')) {
  68.         fs.readFile(FileDirectory + req.url, function (error, content) {
  69.             if (error) {
  70.                 res.writeHead(500);
  71.                 res.end();
  72.             }
  73.             else {
  74.                 res.writeHead(200, { 'Content-Type': 'text/html' });
  75.                 res.end(content, 'utf-8');
  76.             }
  77.         });
  78.         return;
  79.     }
  80.     else if (req.method.toLowerCase() === 'get' && (extName === '')) {
  81.         var myDir = FileDirectory + req.url;
  82.  
  83.         var zipArchiver = archiver('zip');
  84.         res.setHeader("Content-Disposition", "attachment; filename=superZip.zip");
  85.         zipArchiver.pipe(res);
  86.  
  87.         getFilesFromDir(myDir, zipArchiver, function ImCalledWhenDone(error, result) {
  88.             if (error) {
  89.                 console.log("error getfilesfromdir");
  90.             }
  91.             else {
  92.                 console.log("everything went fine");
  93.                 zipArchiver.finalize(function (error) {
  94.                     console.log(error);
  95.                 });
  96.             }
  97.         });
  98.     };
  99.     return;
  100. });
  101. myServer.listen(parseInt(port, 10));
  102. console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement