Patch to allow "retries" when generating random name
This commit is contained in:
parent
46bf0da5ee
commit
dcb72734fe
|
@ -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)
|
||||
|
|
|
@ -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?');
|
||||
}
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue