FileService.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. const knex = require('../models/database');
  2. const path = require('path');
  3. const formidable = require('formidable');
  4. const fs = require('fs');
  5. const level = require('../Files/LevelDb/db');
  6. const express = require('express');
  7. const router = express.Router();
  8. const uuidv4 = require('uuid/v4');
  9. class FileService {
  10. constructor(){
  11. this.FileSystemPath = process.cwd();
  12. this.router = router
  13. this.path = this.FileSystemPath + '/Files/';
  14. this.router.post('/',(req,res) => {
  15. this.acceptFile(req)
  16. .then((data) => {
  17. res.send(data);
  18. })
  19. .catch((e) => {
  20. res.send(e);
  21. });
  22. });
  23. this.router.get('/',(req,res) => {
  24. this.getFile(req)
  25. .then((data) =>{
  26. res.download(data.path);
  27. })
  28. .catch((e) => {
  29. res.sendStatus(500);
  30. });
  31. })
  32. }
  33. acceptFile(req, path = this.path){
  34. return new Promise((resolve,reject)=>{
  35. try{
  36. var form = new formidable.IncomingForm({uploadDir:path});
  37. form.parse(req,(err,fields,files)=>{
  38. Object.keys(files).map((key,index) =>{
  39. let type = files[key]['name'].split(".")[1]
  40. let FileName = files[key]['path'].split(path)[1];
  41. let newPath = path + this._getFolder(type)+ '/' + FileName;
  42. fs.rename(files[key]['path'],newPath, (err) => {
  43. if (err) reject(err);
  44. let token = uuidv4();
  45. level.put(token,this.createJSON(files[key],newPath))
  46. .then((data)=>{
  47. resolve(data);
  48. });
  49. });
  50. });
  51. });
  52. }
  53. catch(e){
  54. reject(e);
  55. }
  56. });
  57. }
  58. _getFolder(type){
  59. switch(type){
  60. case 'sql':
  61. return 'SQL';
  62. case 'doc' || 'docx':
  63. return 'Word';
  64. case 'xlsx' || 'xlsm' || 'xlsb':
  65. return 'Excel';
  66. case 'jpg' || 'png':
  67. return 'Images';
  68. case 'txt':
  69. return 'txt';
  70. }
  71. }
  72. getFile(req){
  73. return new Promise((resolve,reject) => {
  74. try{
  75. if(req.headers.token){
  76. level.get(req.headers.token)
  77. .then((file)=>{
  78. resolve(file)
  79. })
  80. .then((e)=>{
  81. reject(e);
  82. });
  83. }
  84. }
  85. catch(e){
  86. reject(e)
  87. }
  88. })
  89. }
  90. createJSON(file,path){
  91. return {
  92. name:file['name'],
  93. type:file['type'],
  94. path:path
  95. }
  96. }
  97. }
  98. module.exports = new FileService();