DockerERTFF/lib/setup/upload.js

63 lines
2.0 KiB
JavaScript

const config = require('./config');
const debug = require('debug')('server-connect:setup:upload');
const fs = require('fs-extra');
const qs = require('qs');
module.exports = function(app) {
const fileupload = require('express-fileupload');
const isEligibleRequest = require('express-fileupload/lib/isEligibleRequest');
// Make sure tmp folder exists and make it empty
fs.ensureDirSync(config.tmpFolder);
fs.emptyDirSync(config.tmpFolder);
// Always use tmp folder
app.use(fileupload(Object.assign({}, config.fileupload, {
useTempFiles: true,
tempFileDir: config.tmpFolder,
defParamCharset: 'utf8'
})));
app.use((req, res, next) => {
if (!isEligibleRequest(req)) {
return next();
}
let encoded = qs.stringify(req.body);
if (req.files) {
for (let field in req.files) {
encoded += '&' + field + '=' + field;
}
}
req.body = qs.parse(encoded, {
arrayLimit: 10000,
parameterLimit: 10000,
});
// Cleanup
res.once('close', () => {
if (req.files) {
for (let field in req.files) {
let file = req.files[field];
if (Array.isArray(file)) {
file.forEach((file) => {
if (file.tempFilePath && fs.existsSync(file.tempFilePath)) {
debug('delete %s', file.tempFilePath);
fs.unlink(file.tempFilePath);
}
});
} else if (file.tempFilePath && fs.existsSync(file.tempFilePath)) {
debug('delete %s', file.tempFilePath);
fs.unlink(file.tempFilePath);
}
}
}
});
next();
});
debug('Upload middleware configured.');
}