Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

2 роки тому
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // IMPROVE: Improve this with the actual file field being checked, for now we check all uploaded files
  2. function getFiles(app, value) {
  3. const files = [];
  4. if (app.req.files) {
  5. for (let field in app.req.files) {
  6. if (Array.isArray(app.req.files[field])) {
  7. for (let file of app.req.files[field]) {
  8. if (!file.truncated) {
  9. files.push(file);
  10. }
  11. }
  12. } else {
  13. let file = app.req.files[field];
  14. if (!file.truncated) {
  15. files.push(file);
  16. }
  17. }
  18. }
  19. }
  20. return files;
  21. }
  22. module.exports = {
  23. accept: function(value, param) {
  24. const files = getFiles(this, value);
  25. const allowed = param.replace(/\s/g, '').split(',');
  26. if (!files.length) {
  27. return true;
  28. }
  29. for (let file of files) {
  30. if (!allowed.some(allow => {
  31. if (allow[0] == '.') {
  32. const re = new RegExp(`\\${allow}$`, 'i');
  33. if (re.test(file.name)) {
  34. return true;
  35. }
  36. } else if (/(audio|video|image)\/\*/i.test(allow)) {
  37. const re = new RegExp(`^${allow.replace('*', '.*')}$`, 'i');
  38. if (re.test(file.mimetype)) {
  39. return true;
  40. }
  41. } else if (allow.toLowerCase() == file.mimetype.toLowerCase()) {
  42. return true;
  43. }
  44. })) {
  45. return false;
  46. }
  47. }
  48. return true;
  49. },
  50. minsize: function(value, param) {
  51. return !getFiles(this, value).some(file => file.size < param);
  52. },
  53. maxsize: function(value, param) {
  54. return !getFiles(this, value).some(file => file.size > param);
  55. },
  56. mintotalsize: function(value, param) {
  57. return getFiles(this, value).reduce((size, file) => size + file.size, 0) >= param;
  58. },
  59. maxtotalsize: function(value, param) {
  60. return getFiles(this, value).reduce((size, file) => size + file.size, 0) <= param;
  61. },
  62. minfiles: function(value, param) {
  63. return getFiles(this, value).length >= param;
  64. },
  65. maxfiles: function(value, param) {
  66. return getFiles(this, value).length <= param;
  67. },
  68. };