Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

62 wiersze
2.0 KiB

  1. const config = require('./config');
  2. const debug = require('debug')('server-connect:setup:upload');
  3. const fs = require('fs-extra');
  4. const qs = require('qs');
  5. module.exports = function(app) {
  6. const fileupload = require('express-fileupload');
  7. const isEligibleRequest = require('express-fileupload/lib/isEligibleRequest');
  8. // Make sure tmp folder exists and make it empty
  9. fs.ensureDirSync(config.tmpFolder);
  10. fs.emptyDirSync(config.tmpFolder);
  11. // Always use tmp folder
  12. app.use(fileupload(Object.assign({}, config.fileupload, {
  13. useTempFiles: true,
  14. tempFileDir: config.tmpFolder,
  15. defParamCharset: 'utf8'
  16. })));
  17. app.use((req, res, next) => {
  18. if (!isEligibleRequest(req)) {
  19. return next();
  20. }
  21. let encoded = qs.stringify(req.body);
  22. if (req.files) {
  23. for (let field in req.files) {
  24. encoded += '&' + field + '=' + field;
  25. }
  26. }
  27. req.body = qs.parse(encoded, {
  28. arrayLimit: 1000
  29. });
  30. // Cleanup
  31. res.once('close', () => {
  32. if (req.files) {
  33. for (let field in req.files) {
  34. let file = req.files[field];
  35. if (Array.isArray(file)) {
  36. file.forEach((file) => {
  37. if (file.tempFilePath && fs.existsSync(file.tempFilePath)) {
  38. debug('delete %s', file.tempFilePath);
  39. fs.unlink(file.tempFilePath);
  40. }
  41. });
  42. } else if (file.tempFilePath && fs.existsSync(file.tempFilePath)) {
  43. debug('delete %s', file.tempFilePath);
  44. fs.unlink(file.tempFilePath);
  45. }
  46. }
  47. }
  48. });
  49. next();
  50. });
  51. debug('Upload middleware configured.');
  52. }