Youtube music and video downloader

routes.js 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { Converted } from '../api/links';
  2. const uploadedPath = process.env.UPLOAD_DIR;
  3. Router.route('/');
  4. Router.route("/:type/batch/:ids", function() {
  5. import fs from 'fs';
  6. import path from 'path';
  7. let { type, ids } = this.params;
  8. ids = ids.split(',');
  9. let file = (type === 'mp3' ? 'audio' : 'video');
  10. let videos = Converted.find({ id: { $in: ids } }).fetch();
  11. if (!videos.length) {
  12. this.response.writeHead(404);
  13. this.response.end("Files not found");
  14. } else {
  15. let zip = new JSZip();
  16. _.each(videos, video => zip.file(video[file], fs.readFileSync(path.resolve(uploadedPath, video[file]))));
  17. this.response.setHeader("Content-Type", "application/octet-stream");
  18. this.response.setHeader("Content-disposition", `attachment; filename=soundwave-${type}.zip`);
  19. this.response.writeHead(200);
  20. this.response.end(zip.generate({ type: "nodebuffer", compression: "DEFLATE" }));
  21. }
  22. }, { where: 'server'});
  23. Router.route("/:type/:id", function() {
  24. import fs from 'fs';
  25. import path from 'path';
  26. let { type, id } = this.params;
  27. let file = (type === 'mp3' ? 'audio' : 'video');
  28. let video = Converted.findOne({ id: id });
  29. if (!video) {
  30. this.response.writeHead(404);
  31. this.response.end("File not found");
  32. } else {
  33. const filePath = path.resolve(uploadedPath, video[file]);
  34. let stat = fs.statSync(filePath);
  35. this.response.writeHead(200, {
  36. 'Content-Type': (type === 'mp3' ? 'audio/mpeg' : 'video/mp4'),
  37. 'Content-Length': stat.size
  38. });
  39. fs.createReadStream(filePath).pipe(this.response);
  40. }
  41. }, { where: 'server'});