I solved this way, on my case, on top of the user level folder, I have a category folder, lets call it firstLevelFolder
example.file from user_123 would end up on
/firstLevelFolder/user_123/example.file
const uploadUserFilesService = async (fileArray, user) => {
const uploadService = strapi.plugins.upload.services.upload;
const folderService = strapi.plugins.upload.services.folder;
// FIRST LEVEL FOLDER BLOCK
let firstLevelFolderBase = await strapi.query('plugin::upload.folder').findOne({where: {name: 'firstLevelFolder'}});
if (!firstLevelFolderBase) {
await folderService.create({name: 'firstLevelFolder'})
firstLevelFolderBase = await strapi.query('plugin::upload.folder').findOne({where: {name: 'firstLevelFolder'}});
}
// USER LEVEL FOLDER BLOCK
let userLevelFolder = await strapi.query('plugin::upload.folder').findOne({where: {name: user.username, parent: firstLevelFolderBase}});
if (!userLevelFolder) {
await folderService.create({name: user.username, parent: firstLevelFolderBase.id})
userLevelFolder = await strapi.query('plugin::upload.folder').findOne({where: {name: user.username, parent: firstLevelFolderBase}});
}
// NOW LETS UPDATE THE FILES
const uploadedFiles = await Promise.map(fileArray, async (file) => {
return uploadService.upload({
data: {
path: `firstLevelFolder/${user.username}`,
fileInfo: {folder: userLevelFolder.id},
},
files: file
})
}
);
}