Возможно, кому-то поможет - надо разобраться с классами Files, Path, Paths и получилось такое решение задачи:
@Autowired
private FileMultiUploadField upload;
//---
upload.addQueueUploadCompleteListener(queueUploadCompleteEvent -> {
filepath = "некий путь, сформированый на основании данных формы"
+ File.separator;
//Создаем нужную папку
Path pathPrefix = Paths.get(filepath);
try {
Files.createDirectories(pathPrefix);
} catch (IOException e) {
throw new RuntimeException("Error creating ticket's directory ", e);
}
//перебором карты события копируем файлы сначала во временное хранилище
for (Map.Entry<UUID, String> entry : upload.getUploadsMap().entrySet()) {
UUID fileId = entry.getKey();
String fileName = entry.getValue();
//filestorage определяем fileStorageLocator'ом
FileRef fileRef = temporaryStorage.putFileIntoStorage(fileId, fileName, fileStorage);
//а потом из него в созданную папку
InputStream inputStream = fileStorage.openStream(fileRef);
Path path1 = Path.of(filepath, Path.of(fileRef.getFileName()).toString());
try {
Files.copy(inputStream, path1,
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
throw new RuntimeException("Error saving file", e);
}
}
// сообщаем о радостном и успешном событии
notifications.create()
.withCaption("Uploaded files: " + upload.getUploadsMap().values())
.show();
// чистим лишнее
upload.clearUploads();
});