uploads.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. "use strict";
  2. var path = require('path'),
  3. Promise = require('bluebird'),
  4. fs = Promise.promisifyAll(require('fs-extra')),
  5. multer = require('multer'),
  6. _ = require('lodash');
  7. var regFolderName = new RegExp("^[a-z0-9][a-z0-9\-]*[a-z0-9]$");
  8. /**
  9. * Uploads
  10. */
  11. module.exports = {
  12. _uploadsPath: './repo/uploads',
  13. _uploadsThumbsPath: './data/thumbs',
  14. /**
  15. * Initialize Local Data Storage model
  16. *
  17. * @param {Object} appconfig The application config
  18. * @return {Object} Uploads model instance
  19. */
  20. init(appconfig) {
  21. this._uploadsPath = path.resolve(ROOTPATH, appconfig.paths.repo, 'uploads');
  22. this._uploadsThumbsPath = path.resolve(ROOTPATH, appconfig.paths.data, 'thumbs');
  23. return this;
  24. },
  25. /**
  26. * Gets the thumbnails folder path.
  27. *
  28. * @return {String} The thumbs path.
  29. */
  30. getThumbsPath() {
  31. return this._uploadsThumbsPath;
  32. },
  33. /**
  34. * Sets the uploads folders.
  35. *
  36. * @param {Array<String>} arrFolders The arr folders
  37. * @return {Void} Void
  38. */
  39. setUploadsFolders(arrFolders) {
  40. this._uploadsFolders = arrFolders;
  41. return;
  42. },
  43. /**
  44. * Gets the uploads folders.
  45. *
  46. * @return {Array<String>} The uploads folders.
  47. */
  48. getUploadsFolders() {
  49. return this._uploadsFolders;
  50. },
  51. /**
  52. * Creates an uploads folder.
  53. *
  54. * @param {String} folderName The folder name
  55. * @return {Promise} Promise of the operation
  56. */
  57. createUploadsFolder(folderName) {
  58. let self = this;
  59. folderName = _.kebabCase(_.trim(folderName));
  60. if(_.isEmpty(folderName) || !regFolderName.test(folderName)) {
  61. return Promise.resolve(self.getUploadsFolders());
  62. }
  63. return fs.ensureDirAsync(path.join(self._uploadsPath, folderName)).then(() => {
  64. if(!_.includes(self._uploadsFolders, folderName)) {
  65. self._uploadsFolders.push(folderName);
  66. self._uploadsFolders = _.sortBy(self._uploadsFolders);
  67. }
  68. return self.getUploadsFolders();
  69. });
  70. },
  71. /**
  72. * Check if folder is valid and exists
  73. *
  74. * @param {String} folderName The folder name
  75. * @return {Boolean} True if valid
  76. */
  77. validateUploadsFolder(folderName) {
  78. if(_.includes(this._uploadsFolders, folderName)) {
  79. return path.resolve(this._uploadsPath, folderName);
  80. } else {
  81. return false;
  82. }
  83. },
  84. /**
  85. * Sets the uploads files.
  86. *
  87. * @param {Array<Object>} arrFiles The uploads files
  88. * @return {Void} Void
  89. */
  90. setUploadsFiles(arrFiles) {
  91. let self = this;
  92. /*if(_.isArray(arrFiles) && arrFiles.length > 0) {
  93. self._uploadsDb.Files.clear();
  94. self._uploadsDb.Files.insert(arrFiles);
  95. self._uploadsDb.Files.ensureIndex('category', true);
  96. self._uploadsDb.Files.ensureIndex('folder', true);
  97. }*/
  98. return;
  99. },
  100. /**
  101. * Adds one or more uploads files.
  102. *
  103. * @param {Array<Object>} arrFiles The uploads files
  104. * @return {Void} Void
  105. */
  106. addUploadsFiles(arrFiles) {
  107. if(_.isArray(arrFiles) || _.isPlainObject(arrFiles)) {
  108. //this._uploadsDb.Files.insert(arrFiles);
  109. }
  110. return;
  111. },
  112. /**
  113. * Gets the uploads files.
  114. *
  115. * @param {String} cat Category type
  116. * @param {String} fld Folder
  117. * @return {Array<Object>} The files matching the query
  118. */
  119. getUploadsFiles(cat, fld) {
  120. return /*this._uploadsDb.Files.chain().find({
  121. '$and': [{ 'category' : cat },{ 'folder' : fld }]
  122. }).simplesort('filename').data()*/;
  123. },
  124. deleteUploadsFile(fldName, f) {
  125. }
  126. };