Patch to allow "retries" when generating random name

This commit is contained in:
Bobby Wibowo 2018-03-18 19:21:04 +07:00
parent 46bf0da5ee
commit dcb72734fe
No known key found for this signature in database
GPG Key ID: 51C3A1E1E22D26CF
2 changed files with 23 additions and 2 deletions

View File

@ -61,6 +61,13 @@ module.exports = {
// The length of the random generated name for the uploaded files
fileLength: 32,
/*
This option will limit how many times it will try to generate random names
for uploaded files. If this value is higher than 1, it will help in cases
where files with the same name already exists (higher chance with shorter file name length).
*/
maxTries: 1,
/*
NOTE: Thumbnails are only for the admin panel and they require you
to install a separate binary called graphicsmagick (http://www.graphicsmagick.org)

View File

@ -9,12 +9,26 @@ const utils = require('./utilsController.js');
const uploadsController = {};
// Let's default it to only 1 try
const maxTries = config.uploads.maxTries || 1;
const uploadDir = path.join(__dirname, '..', config.uploads.folder);
const storage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, path.join(__dirname, '..', config.uploads.folder));
cb(null, uploadDir);
},
filename: function(req, file, cb) {
cb(null, randomstring.generate(config.uploads.fileLength) + path.extname(file.originalname));
for (let i = 0; i < maxTries; i++) {
const name = randomstring.generate(config.uploads.fileLength) + path.extname(file.originalname);
try {
fs.accessSync(path.join(uploadDir, name));
console.log(`A file named "${name}" already exists (${i + 1}/${maxTries}).`);
} catch (err) {
// Note: fs.accessSync() will throw an Error if a file with the same name does not exist
return cb(null, name);
}
}
return cb('Could not allocate a unique file name. Try again?');
}
});